繁体   English   中英

R 中的压缩数据帧

[英]Condensing Data Frame in R

我只是有一个简单的问题,非常感谢大家的意见,你们对我的项目帮助很大。 我还有一个关于 R 中的数据帧的问题。

我有看起来类似于这样的数据框:

    C <- c("","","","","","","","A","B","D","A","B","D","A","B","D")
    D <- c(NA,NA,NA,2,NA,NA,1,1,4,2,2,5,2,1,4,2)
    G <- list(C=C,D=D)
    T <- as.data.frame(G)
    T
   C  D
1     NA
2     NA
3     NA
4     2
5     NA
6     NA
7     1
8  A  1
9  B  4
10 D  2
11 A  2
12 B  5
13 D  2 
14 A  1
15 B  4
16 D  2 

我希望能够将所有重复字符压缩成一个,并且看起来类似于:

    J B C E
  1   2 1
  2 A 1 2 1
  3 B 4 5 4
  4 D 2 2 2

所以当然,数据都是一样的,只是它被压缩并形成了新的列来保存数据。 我相信有一个简单的方法可以做到这一点,但从我看过的书中,我没有看到任何关于这个的东西!

编辑我编辑了这个例子,因为到目前为止它没有与答案一起工作。 我想知道空白中的 NA、空白和不均匀是否有影响?

似乎得到了你正在寻找的结果。 我假设可以删除NA值,因为它与您显示的所需 output 匹配。

T <- na.omit(T)
T$ind <- ave(1:nrow(T), T$C, FUN = seq_along)
reshape(T, direction = "wide", idvar = "C", timevar = "ind")
#    C D.1 D.2 D.3
# 4      2   1  NA
# 8  A   1   2   1
# 9  B   4   5   4
# 10 D   2   2   2

library(reshape2)
dcast(T, C ~ ind, value.var = "D", fill = "")
#   C 1 2 3
# 1   2 1  
# 2 A 1 2 1
# 3 B 4 5 4
# 4 D 2 2 2

这是重塑解决方案:

require(reshape)
cast(T, C ~ ., function(x) x)

将 T 更改为 df 以避免坏习惯。 返回一个列表,这不是您想要的,但您可以从那里转换。

C <- c("A","B","D","A","B","D","A","B","D")
D <- c(1,4,2,2,5,2,1,4,2)
my.df <- data.frame(id=C,val=D)

ret <- function(x) x
by.df <- by(my.df$val,INDICES=my.df$id,ret)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM