Re: [問題] 如何整理數量位置資料如:1胃,2腸
我覺得 reshape::melt() 之後再做點字串處理蠻直覺的。
txt <- "ID,Food A,Food B,Food C,Food E
C146,,,,3腸
B287,,,,10腸
C140,,4大腸,,4腸
C133,,,1胃,
C132,1腸,,,
B305,,,1腸,
C112,,2腸,,1胃
C120,,,,1腸
C128,,,,1腸"
dt0 <- read.csv(textConnection(txt))
library(reshape)
dt1 <- melt(dt0, id = c("ID"), variable_name = "Food type")
dt1$value <- as.character(dt1$value)
dt1 <- subset(dt1, value != "")
dt1$Amount <- as.numeric(gsub("^([0-9]+)(.+)$", "\\1", dt1$value))
dt1$Location <- as.factor(gsub("^([0-9]+)(.+)$", "\\2", dt1$value))
dt2 <- dt1[sort(dt1$ID), ]
dt2 為所求。
※ 引述《helixc (@_2;)》之銘言:
: [軟體熟悉度]:新手+入門
: [問題敘述]:
: 手上有一筆某蛙類的解剖資料,想要分析食性。
: 紀錄的時候會長這樣:
: ID,Food A,Food B,Food C,Food E
: C146,,,,3腸
: B287,,,,10腸
: C140,,,,4腸
: C133,,,1腸,
: C132,1腸,,,
: B305,,,1腸,
: C112,,2腸,,1腸
: C120,,,,1腸
: C128,,,,1腸
: 想要整理成這樣的資料:
: ID, Food type, Amount, Location
: C146, E, 3, 腸
: B287, E, 10, 腸
: C140, E, 4, 腸
: C133, C, 1, 腸
: 目前我知道怎麼用tidyr::gather()整理資料,
: 但目前想不到要怎麼把混在一起的數字和文字分開。
: 因為數量不一定都是一位數的數字,位置也會有兩個字的狀況,
: 純粹把資料當成文字硬去抽取特定位置沒辦法解決這個問題。
: 資料量不大,其實可以用Excel做,
: 但我在Excel就是用left()和right()抽取最常見的位數,
: 再用工人智慧去檢核。理論上在R應該有更人工智慧(?)的方法?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.37.172
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1436523630.A.358.html
※ 編輯: andrew43 (122.117.37.172), 07/10/2015 18:23:08
推
07/10 20:16, , 1F
07/10 20:16, 1F
推
07/11 18:37, , 2F
07/11 18:37, 2F
→
07/11 18:37, , 3F
07/11 18:37, 3F
→
07/11 18:37, , 4F
07/11 18:37, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章