【问题标题】:R Replace cells with value 1 with a value from a corresponding columnR用相应列中的值替换值为1的单元格
【发布时间】:2022-08-16 21:40:06
【问题描述】:

我有一个在不同样方中发现的各种植物的存在 (1) 或不存在 (NA) 的数据框。我想用 1 替换值的数据框中的 5 列。我希望得到 5 个不同的数据框。

当前数据框

这是数据框的一部分。每一行都是不同的植物。 L、F、R、N 和 S 列是我希望替换的值赢得最后一个大小列(\'1_19\'、\'1_20\' 等)。如果有空白/NA,我想将它们保留为空白。

预期产出

这是 L 列的预期输出示例。我也想将其他列作为单独的 dfs 执行此操作。

数据框

structure(list(Species = c(\"Conocephalum conicum\", \"Mnium hornum\", 
\"Polytrichum formosum\", \"Oxalis acetosella\", \"Circaea lutetiana\", 
\"Geum urbanum\"), Common.Name = c(\"Great Scented Liverwort\", \"Swan\'s-neck Thyme-moss\", 
\"Bank Haircap\", \"Wood Sorrel\", \"Enchanter\'s-nightshade\", \"Wood Avens\"
), L = c(3L, 4L, 4L, 4L, 4L, 4L), F = c(7L, 5L, 6L, 6L, 6L, 6L
), R = c(6L, 4L, 3L, 4L, 7L, 7L), N = c(5L, 4L, 3L, 4L, 6L, 7L
), S = c(0L, 0L, 0L, 0L, 0L, 0L), Source = c(\"Hill et al., 2007\", 
\"Hill et al., 2007\", \"Hill et al., 2007\", \"Hill et al., 1999\", 
\"Hill et al., 1999\", \"Hill et al., 1999\"), X1_19 = c(NA, NA, 
NA, NA, NA, 1L), X1_20 = c(NA, NA, NA, NA, NA, 1L), X1_22 = c(NA, 
NA, NA, NA, NA, 1L), X2_19 = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), X2_20 = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), X2_22 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_), X3_19 = c(NA, NA, NA, NA, NA, 1L), 
    X3_20 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_), X3_22 = c(NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_), X4_19 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), X4_20 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_), X4_22 = c(NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_), X5_19 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), X5_20 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_), X5_22 = c(NA, NA, NA, NA, NA, 
    NA), X6_19 = c(NA, NA, NA, 1L, NA, NA), X6_20 = c(NA, NA, 
    NA, NA, 1L, NA), X6_22 = c(NA, NA, NA, 1L, NA, NA), X7_19 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), X7_20 = c(NA, NA, NA, NA, 1L, NA), X7_22 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), X8_19 = c(1L, NA, 1L, NA, NA, NA), X8_20 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), X8_22 = c(1L, NA, 1L, NA, NA, NA), X9_19 = c(NA, 1L, NA, 
    NA, NA, NA), X9_20 = c(NA, 1L, NA, NA, NA, NA), X9_22 = c(NA, 
    1L, NA, NA, NA, NA)), row.names = c(NA, 6L), class = \"data.frame\")

    标签: r replace


    【解决方案1】:

    使用 dplyr,这应该可以工作:

    L=df%>%
      rowwise()%>% 
      mutate_at(.vars=colnames(df)[9:35],funs(replace(., which(.==1), L)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2020-05-16
      相关资源
      最近更新 更多