我需要重新组织包含大多数重复数据的csv文件中的数据.我将数据导入到数据帧中的R但是我遇到以下问题:
ID Language Author Keyword
12 eng Rob COLOR=Red
12 eng Rob SIZE=Large
12 eng Rob DD=1
15 eng John COLOR=Red
15 eng John SIZE=Medium
15 eng John DD=2
Run Code Online (Sandbox Code Playgroud)
我需要做的是将其转换为一行,每个关键字都在一个单独的列中
ID Language Author COLOR SIZE DD
12 eng Rob Red Large 1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
使用这个reshape2包很简单:
随着tt定义为加里的答案
library("reshape2")
tt <- cbind(tt, colsplit(tt$Keyword, "=", c("Name", "Value")))
tt_new <- dcast(tt, ID + Language + Author ~ Name, value.var="Value")
Run Code Online (Sandbox Code Playgroud)
这使
> tt_new
ID Language Author COLOR DD SIZE
1 12 eng Rob Red 1 Large
2 15 eng John Red 2 Medium
Run Code Online (Sandbox Code Playgroud)
使用plyrans strsplit你可以做这样的事情:
library(plyr)
res <- ddply(dat,.(ID,Language,Author),function(x){
unlist(sapply(strsplit(x$Keyword,'='),'[',2))
})
colnames(res)[4:6] <- c('COLOR','SIZE','DD')
ID Language Author COLOR SIZE DD
1 12 eng Rob Red Large 1
2 15 eng John Red Medium 2
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个解决@Brian关注的概括:
res <- ddply(dat,.(ID,Language,Author), function(x){
kv <- strsplit(x$Keyword, '=')
setNames(sapply(kv, `[`, 2),
sapply(kv, `[`, 1)) })
Run Code Online (Sandbox Code Playgroud)