library(tidyverse)
df <- tibble(col1 = c(5, 2), col2 = c(6, 4), col3 = c(9, 9))
# # A tibble: 2 x 3
# col1 col2 col3
# <dbl> <dbl> <dbl>
# 1 5 6 9
# 2 2 4 9
我需要添加第1列和第3列。但是列名经常更改。因此,我只能使用列号而不是实际的列名。
尝试1可以正常工作。
尝试2和3不起作用。
我的语法出了什么问题?我不能使用尝试1,因为下个月列名称可能会有所不同,但是它们的相对位置将保持不变。
df %>% mutate(col4 = col1 + col3) # attempt 1
df %>% mutate(col4 = .[, 1] + .[, 3]) # attempt 2
df %>% {mutate(col4 = .[, 1] + .[, 3])} # attempt 3
答案 0 :(得分:2)
如果它是基于位置的,请根据列索引对列进行子设置,以使用rowSums
。好处是我们也可以照顾NA
元素(如果有)
df %>%
mutate(col4 = rowSums(.[c(1, 3)], na.rm = TRUE))
# A tibble: 2 x 4
# col1 col2 col3 col4
# <dbl> <dbl> <dbl> <dbl>
#1 5 6 9 14
#2 2 4 9 11
关于OP的问题,我们需要[[
而不是[
来将单个列设置为vector
。使用df[, 1]
或.[,1]
时,它仍将是具有一列的tibble
,而不是转换为vector
时,因为我们想到的是data.frame
< / p>
df %>%
mutate(col4 = .[[1]] + .[[3]])
# A tibble: 2 x 4
# col1 col2 col3 col4
# <dbl> <dbl> <dbl> <dbl>
#1 5 6 9 14
#2 2 4 9 11