【问题标题】:How can I get unique values in dataframe column into a dataframe even though the number of values is not the same即使值的数量不同,如何将数据框列中的唯一值放入数据框中
【发布时间】:2015-01-18 18:09:09
【问题描述】:

我有一个数据框数据:

Data <- data.frame(A=sample(1:7),B=c(5,5,5,6,6,6,6),C=c(1,2,2,3,3,4,5))
  A B C
1 6 5 1
2 7 5 2
3 4 5 2
4 2 6 3
5 1 6 3
6 5 6 4
7 3 6 5    

我正在尝试将每个列中的唯一值提取到 data.frame 中。 每列都有不同的集合和数量的唯一值。

我正在寻找类似的东西:

A  1   2   3   4   5   6   7 
B  5   6   NA  NA  NA  NA  NA
C  1   2   3   4   5   NA  NA

我能够遍历它并获得包含信息的列表(我尝试使用列表,因为它们的长度不同)

vars <- c('A','B','C')
mylist = vector("list",length(vars))
for(i in 1: length(vars)){
   mylist[[i]] <- c( names(table( Data[ , vars[i] ] )))
}

如何将信息放入 data.frame 中,最好没有循环? 谢谢!

【问题讨论】:

  • 我认为lapply(Data, unique) 最好
  • 经过Richard的建议,如果你想转换成matrix/data.frame,可以看看here

标签: r dataframe unique


【解决方案1】:

lapply() 就足够了。这是我使用的技巧。

xx <- lapply(Data, unique)
data.frame(do.call(rbind, lapply(xx, "length<-", max(vapply(xx, length, 1L)))))
#   X1 X2 X3 X4 X5 X6 X7
# A  2  3  6  5  1  7  4
# B  5  6 NA NA NA NA NA
# C  1  2  3  4  5 NA NA

首先,我们遍历Data 的列以查找所有唯一值。然后我们迭代它,使用length&lt;- 将每个元素的长度扩展到xx 的最长元素的长度。然后我们将它们整合到一个数据框中。

【讨论】:

  • 同样,data.frame(do.call(rbind, lapply(xx, "[", seq_len(nrow(Data)))))
  • @alexis_laz - 仅当最长的唯一元素与 nrow(Data) 相同时。否则,您将使用额外的 NA 填充所有元素
  • @alexis_laz - 不需要的 NA 的示例,因为 nrow(df) 不一样,df &lt;- data.frame(x = c(1,2,1,3), y = c(1,2,1,2)); xx &lt;- lapply(df, unique); lapply(xx, "[", seq_len(nrow(df)))
【解决方案2】:

这是一个可能的data.table 解决方案

library(data.table)
data.frame(t(setDT(Data)[, lapply(.SD, function(x) {
                                  temp <- unique(x)
                                  c(sort(temp), 
                                  rep(NA, length(x) - length(temp)))
                                  })]))

#   X1 X2 X3 X4 X5 X6 X7
# A  1  2  3  4  5  6  7
# B  5  6 NA NA NA NA NA
# C  1  2  3  4  5 NA NA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多