【问题标题】:transform data frame value based on column name根据列名转换数据框值
【发布时间】:2015-04-30 04:05:24
【问题描述】:

我们有一个这样的data.frame:

ID 10_1 2_20 [...]
1    1   1   [...]
2    2   1   [...]

我们需要根据列的名称更改数据框的值。例如,在第 1 行中,列 10_1 将获得值 1,因为 10 大于“10_1”中的值。但是第 1 行中的第 2_20 列将获得值 0,因为“2_20”中的 2 小于 20。

如何遍历数据框并根据列名更改每行中列的值?

谢谢

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你可以试试

    indx <- (vapply(strsplit(names(df1)[-1], '_'), function(x) {
               x1 <- as.numeric(x)
               x1[1] >x1[2]}, logical(1L)))+0L
    df1[-1] <- indx[col(df1[-1])]
    df1
    #  ID 10_1 2_20
    #1  1    1    0
    #2  2    1    0
    

    或者你可以试试sub

     v1 <- as.numeric(sub('_.*', '', names(df1)[-1]))
     v2 <- as.numeric(sub('.*_', '', names(df1)[-1]))
     indx <- (v1 >v2)+0L
      df1[-1] <- indx[col(df1[-1])]
    

    数据

    df1 <- structure(list(ID = 1:2, `10_1` = 1:2, `2_20` = c(1L, 1L)),
    .Names = c("ID","10_1", "2_20"), class = "data.frame",
    row.names = c(NA, -2L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2022-12-17
      • 1970-01-01
      • 2018-07-11
      • 2016-10-25
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多