首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不同列中使用NA压缩行,以创建单行

在不同列中使用NA压缩行,以创建单行
EN

Stack Overflow用户
提问于 2013-07-19 00:02:01
回答 5查看 879关注 0票数 1

我有一个像这样的数据框

代码语言:javascript
运行
复制
test <- data.frame(id = rep(LETTERS[1:2],each = 3), 
    a = c(1,NA,NA,10,NA,NA), 
    b = c(2,NA,NA,20,NA,NA), 
    c = c(NA,3,NA,NA,30,NA), 
    d = c(NA,NA,4,NA,NA,40))

我得到了这个数据帧,并希望将其转换为每个唯一的'id‘只有一行,并且在数据帧中没有NAs。

我正在做这个

代码语言:javascript
运行
复制
ddply(test, 
    .variables = 'id', 
    .fun = function(df){
        colSums(df[,1:4], na.rm = T)})

获取此data.frame的步骤

代码语言:javascript
运行
复制
      id  a  b  c  d
    1  A  1  2  3  4
    2  B 10 20 30 40

它是有效的,但有没有一种更直接的方法来完成它而不使用colSums,某种程度上压缩行,为每个'id‘创建单行,因为在每个'id’中,所有列只有一个值,其余的都是NAs。我确实在寻找其他东西的时候遇到了类似的请求,但现在找不到了!

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-19 00:30:28

使用R基函数

代码语言:javascript
运行
复制
> test[is.na(test)] <-0
> aggregate(.~id, data=test, FUN="sum")
  id  a  b  c  d
1  A  1  2  3  4
2  B 10 20 30 40
票数 5
EN

Stack Overflow用户

发布于 2013-07-19 00:20:59

下面是我遇到类似问题时推荐给我的一个解决方案,使用data.table和is.na:

代码语言:javascript
运行
复制
require(data.table)
DT=data.table(test)

unique(DT[, lapply(.SD, function(x) x[!is.na(x)]), by = id])

   id  a  b  c  d
1:  A  1  2  3  4
2:  B 10 20 30 40

请注意,这将为您提供一个data.table,而不是一个data.frame。如果你不习惯使用这个数据结构,你可以很容易地转换它:

代码语言:javascript
运行
复制
data.frame(unique(DT[, lapply(.SD, function(x) x[!is.na(x)]), by = id]))

  id  a  b  c  d
1  A  1  2  3  4
2  B 10 20 30 40

途径:Deduplicating/collapsing records in an R dataframe

票数 1
EN

Stack Overflow用户

发布于 2013-07-19 00:22:14

我不知道这会不会容易很多,但是:

代码语言:javascript
运行
复制
test <- data.frame(id.l = rep(LETTERS[1:2],each = 3), 
                   a = c(1,NA,NA,10,NA,NA), 
                   b = c(2,NA,NA,20,NA,NA), 
                   c = c(NA,3,NA,NA,30,NA), 
                   d = c(NA,NA,4,NA,NA,40))
x <- melt(test, id.l = id, na.rm = T)
dcast(x, id.l ~ variable)
# id.l  a  b  c  d
# 1    A  1  2  3  4
# 2    B 10 20 30 40

我不得不更改你的id列的名称,因为我不能创建id = id

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17728540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档