当我的数据框在两列上都包含重复项时,我在创建矩阵时遇到问题 实施例
n = c('A', 'B', 'C', 'A', 'B', 'B')
s = c("aa", "bb", "cc","dd","aa","cc")
df = data.frame(n, s)
但是使用df我需要创建这样的东西: 新数据框(NDF)
A "aa" "dd"
B "bb" "aa" "cc"
C "cc"
正如您所看到的,我在数据框df中仅使用了列n中的唯一值,并且行使用df $ s中的值填充,此示例中的最新值可能为零或na(现在为空)
F<-matrix(nrow=length(unique(df$n)),ncol=length(unique(df$s)))
但是当我试图在这里做一个循环时(For(i)... For。(j)...)我无法弄明白该怎么做./ 任何帮助都非常受欢迎 提前致谢
答案 0 :(得分:0)
不清楚你想要什么,因为data.frame
必须是矩形的。
也许你想要这个:
tapply(s, n, list)
#$A
#[1] "aa" "dd"
#
#$B
#[1] "bb" "aa" "cc"
#
#$C
#[1] "cc"
答案 1 :(得分:0)
您可以使用dcast
包中的plyr
函数获取以下data.frame:
dcast(data=df, n ~ s)
n aa bb cc dd
1 A aa <NA> <NA> dd
2 B aa bb cc <NA>
3 C <NA> <NA> cc <NA>
如果您希望“在前面”拥有所有非NA值,则需要执行更多操作。我已经找到了以下解决方案,这个解决方案根本没有用,但是很有效。
x <- dcast(data=df, n ~ s)
t(apply(x ,1 ,function(x){
tmp <- sum(is.na(x))
c(x[complete.cases(x)], rep(NA,tmp))
}))
[,1] [,2] [,3] [,4] [,5]
[1,] "A" "aa" "dd" NA NA
[2,] "B" "aa" "bb" "cc" NA
[3,] "C" "cc" NA NA NA