0

当我的数据框在两列上都包含重复项时,我在创建矩阵时遇到问题示例

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)......)我无法弄清楚如何去做。/任何帮助都非常受欢迎提前谢谢

4

2 回答 2

0

不清楚你想要什么,因为 adata.frame必须是矩形的。

也许你想要这个:

tapply(s, n, list)
#$A
#[1] "aa" "dd"
#
#$B
#[1] "bb" "aa" "cc"
#
#$C
#[1] "cc"
于 2013-08-06T15:23:21.950 回答
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  
于 2013-08-07T13:32:27.560 回答