【问题标题】:Using map2_dfr() For Specific Column Addition and Subtraction R使用 map2_dfr() 进行特定列的加法和减法 R
【发布时间】:2019-12-21 14:28:10
【问题描述】:

您好,我有一个 2000x56 的数据框。我想对特定列做一个简单的减法。例如,我想从 3 中减去第 1 列,从 7 中减去第 5 列等等。

这是数据集的一个样本。

df= structure(list(c(48.9518, 47.9639, 47.5751, 46.5795, 46.6301, 
45.0705, 43.7893, 43.8325, 46.507, 45.1127, 46.2437, 44.6545, 
43.5113, 43.2287, 43.6998, 41.44, 41.44, 41.8239, 43.2681, 42.5079, 
40.315), c(51.9657, 50.928, 50.559, 50.477, 51.8529, 47.506, 
49.0126, 47.8382, 57.6266, 59.9311, 71.9462, 44.6545, 43.5113, 
43.2287, 43.6998, 41.44, 41.44, 41.7783, 43.6673, 42.915, 40.4284
), c(42.0552, 40.141, 40.07, 40.3302, 39.7687, 39.3804, 40.5853, 
40.2478, 40.7404, 36.0079, 39.3361, 38.6883, 33.1306, 34.2174, 
34.0593, 34.4541, 32.1919, 36.2109, 37.0591, 35.7394, 34.8065
), c(43.5527, 40.6115, 41.1305, 42.6484, 42.1938, 41.2828, 41.8979, 
41.9331, 47.0511, 48.0175, 49.5343, 45.5063, 33.1306, 34.2174, 
34.0593, 34.4541, 32.0264, 36.1705, 37.2596, 35.5938, 34.3885
), c(56.3464, 53.5964, 55.2791, 54.7751, 53.6983, 48.2984, 46.8343, 
50.339, 54.6205, 54.6327, 53.7313, 51.839, 49.9128, 60.1649, 
64.1637, 57.4661, 57.4661, 57.9187, 51.9147, 51.5786, 49.357), 
    c(61.6417, 57.054, 58.8402, 60.6182, 58.3043, 48.7071, 47.5466, 
    52.9527, 67.9061, 64.3576, 63.6387, 61.2588, 43.1908, 59.254, 
    63.8611, 57.4661, 57.4661, 58.6671, 54.097, 53.8527, 51.4929
    ), c(62.3702, 58.9045, 58.1827, 59.4045, 57.7552, 50.4304, 
    45.2969, 51.3944, 55.3861, 54.3857, 50.634, 49.1729, 51.0196, 
    56.8711, 59.2268, 56.1792, 56.812, 53.9583, 52.6343, 49.8832, 
    47.8319)), row.names = c(NA, -21L), class = c("tbl_df", "tbl", 
"data.frame"))

head(df)
A tibble: 6 x 7
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  49.0  52.0  42.1  43.6  56.3  61.6  62.4
2  48.0  50.9  40.1  40.6  53.6  57.1  58.9
3  47.6  50.6  40.1  41.1  55.3  58.8  58.2
4  46.6  50.5  40.3  42.6  54.8  60.6  59.4
5  46.6  51.9  39.8  42.2  53.7  58.3  57.8
6  45.1  47.5  39.4  41.3  48.3  48.7  50.4

我首先用我想减去的列号创建 2 个向量。

First = seq(1, ncol(df), 4)
Second = seq(3, ncol(df), 4)
print(First)
1, 5
print(Second)
3, 7

现在我使用 purrr 中的 map2 创建一个循环。我希望输出是一个数据框,所以我使用 purrr 中的 map2_dfr()

map2_dfr(First, Second, ~df[,.x]-df[,.y])

结果是一无所有。

我尝试在 map2_dfr() 中创建一个函数,但没有成功。

map2_dfr(First, Second, function(x, y){df[,x]-df[,y]})

我的预期输出是一个数据框,其中

Column1 = df[,1]-df[,3]
Column2 = df[,5]-df[,7]

谢谢。

【问题讨论】:

  • 你没有任何列名。
  • 嘿@akrun 我认为这可能是问题所在,但如果我使用 map2() 而不是 map_dfr(),我仍然会得到一个空列表。
  • 我认为结构对于一个 tidyverse 来说是错误的,即没有列名
  • 你需要单列还是多列,因为map_dfr它将具有相同名称的列绑定到一个列中
  • 你绝对正确(像往常一样)。谢谢@akrun。附言。我有同名的 colmun,所以它给了我一个组合列

标签: r tidyverse purrr


【解决方案1】:

问题是数据集没有任何列名

colnames(df) <- paste0("col", seq_along(df))

现在,应用 OP 的代码应该可以正常工作了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多