R 将数据从3行重新组织为1行

R 将数据从3行重新组织为1行,r,csv,reshape2,R,Csv,Reshape2,我需要重新组织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=Med

我需要重新组织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
我需要做的是将它转换成一行,每个关键字在一个单独的列中

ID   Language  Author  COLOR  SIZE      DD
12   eng       Rob     Red    Large     1

有什么想法吗?

使用
plyr
ans
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
库(plyr)

res使用
重塑2
尝试此操作:

tt <- read.table(header=T,text='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')

tt$Keyword <- as.character(tt$Keyword)

tt <- transform(tt, key_val = lapply(tt$Keyword,function(x) strsplit(x,'=')[[1]][2]),
 key_var = lapply(tt$Keyword,function(x) strsplit(x,'=')[[1]][1]))

tt_new <- dcast (tt, ID + Language + Author ~ key_var, value.var='key_val')

tt使用
restrape2
包这很简单:

使用中定义的
tt


你的
lappy
应该是
sapply
,你需要一个
值。var=“key\u val”
在你的
dcast
调用中。没有意识到
值。var
需要引号中的var,所以它给了我一个错误。我省略了它,但是在本例中,
dcast
正确地猜测了正确的变量。谢谢。作为注意事项,这确实假设关键字总是
COLOR
SIZE
DD
,并且总是按此顺序排列。如果这个假设是真的,那么它就可以工作了。我可以让它工作,但是在dcast()运行之后,我得到一个错误,它说:聚合函数丢失:默认为长度。然后我在每个新变量中得到1。我猜在真实的数据集中一定有不正确的地方,因为它在这个简化的数据集上工作得很好。有什么想法吗?我好像在什么地方有不同的数字。需要找出如何找到超过3行的ID并将其清除。如果出现了多次出现的
ID
语言
作者
、和
名称
,则会出现该警告。您可以通过在结果中查找除1以外的值来判断它是/它们是哪一个(基本上,当一个组合有多个值时,“重塑”将以某种方式将它们聚合为单个值,默认情况下,这只是计算有多少个值)。
tt <- read.table(header=T,text='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')

tt$Keyword <- as.character(tt$Keyword)

tt <- transform(tt, key_val = lapply(tt$Keyword,function(x) strsplit(x,'=')[[1]][2]),
 key_var = lapply(tt$Keyword,function(x) strsplit(x,'=')[[1]][1]))

tt_new <- dcast (tt, ID + Language + Author ~ key_var, value.var='key_val')
library("reshape2")

tt <- cbind(tt, colsplit(tt$Keyword, "=", c("Name", "Value")))
tt_new <- dcast(tt, ID + Language + Author ~ Name, value.var="Value")
> tt_new
  ID Language Author COLOR DD   SIZE
1 12      eng    Rob   Red  1  Large
2 15      eng   John   Red  2 Medium