【发布时间】: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,所以它给了我一个组合列