【问题标题】:Add rows whose columns are number in R or refer a column whose name is a number在 R 中添加列为数字的行或引用名称为数字的列
【发布时间】:2014-10-04 11:13:21
【问题描述】:

这个问题可能很愚蠢。如何在以下数据框中添加列是数字的行。我们可以在不更改列名的情况下做到这一点。谢谢。

Perinatal_Region     1     2   NaN total
           1     13456 12770   1     
           2     36975 35470  NA     
           3    19116 18156   2     
           4    84653 81120   4     
           5    57015 54313   4     
           NaN     1     1   NA    

【问题讨论】:

  • 您要消除带有 NA 的行吗?
  • 没有。我喜欢所有行的总数。问题是我们可以识别名称为数字的列吗?数据框是通过变换得到的。
  • 如果你只想对 R 中的一行 data.frame 求和,你可以使用sum(data.frame[row.number,],na.rm=TRUE)。这将“忽略”数据中存在的 NA。假设您的 data.frame 被称为测试,并且您想对第 10 行求和:sum(test[10,],na.rm=TRUE)。这有帮助吗?
  • 我不明白你想做什么。你想要的输出是什么?要对行求和,只需执行 rowSums(df, na.rm = T)
  • df$Total <- rowSums(df[,grep("\\d+", colnames(df))])

标签: r identity-column


【解决方案1】:

如果您只想对以数字命名的列求和:

data <- data.frame(Perinatal_region = c(1,2,3,4,5,1/0), one = c(13456,36975,19116,84653,57015,1 ), two = c(12770, 35470, 18156, 81120, 54313, 1)) 
names(data) <- c("Perinatal_region", "1", "2")
columns_to_sum <- c()

for(name in names(data)){
  if (is.na(as.numeric(name))==FALSE){ #If the name is not a number as.numeric() returns NA
     columns_to_sum <- c(columns_to_sum, name)
   }

}

a <- colSums(data[columns_to_sum])

这是结果:

> a
     1      2 
211216 201830 

【讨论】:

    【解决方案2】:

    您可以通过以下几种方式做到这一点:

    df <- structure(list(Perinatal_Region = c(1, 2, 3, 4, 5, NaN), `1` = c(13456L, 
    36975L, 19116L, 84653L, 57015L, 1L), `2` = c(12770L, 35470L, 
    18156L, 81120L, 54313L, 1L), `NaN` = c(1L, NA, 2L, 4L, 4L, NA
    )), .Names = c("Perinatal_Region", "1", "2", "NaN"), class = "data.frame", row.names = c(NA, 
    -6L))
    
     rowSums(df[,grep("\\d+", colnames(df))])
     #[1]  26226  72445  37272 165773 111328      2
    

    如果是:

      colSums(df[,grep("\\d+", colnames(df))])
      #    1      2 
     #211216 201830 
    

    或者

     within(df, Total<- `1` +`2`)
     #  Perinatal_Region     1     2 NaN  Total
     #1                1 13456 12770   1  26226
     #2                2 36975 35470  NA  72445
     #3                3 19116 18156   2  37272
     #4                4 84653 81120   4 165773
     #5                5 57015 54313   4 111328
     #6              NaN     1     1  NA      2
    
     addmargins(as.table(as.matrix(df[,c("1", "2")])))
     #         1      2    Sum
     #A    13456  12770  26226
     #B    36975  35470  72445
     #C    19116  18156  37272
     #D    84653  81120 165773
     #E    57015  54313 111328
     #F        1      1      2
     #Sum 211216 201830 413046
    

    12NaN的所有列

     within(df, Total<- `1` +`2` +`NaN`) 
    
     rowSums(df[,grep("\\d+|NaN", colnames(df))], na.rm=T)
     #[1]  26227  72445  37274 165777 111332      2
    

    【讨论】:

    • 谢谢。如果我们想添加所有三个 cols:1,2,NaN,我们该怎么做?
    • 谢谢。 rowSums 有效,但 inside 不适用于 NA 行。
    • @user1582755。这个对我有用。您可以使用dput(head(data, 6)) 显示示例
    • 我不知道为什么。我复制了你所有的代码。具有 NA 的行的总数为 NA。
    猜你喜欢
    • 2021-02-12
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多