如何将命名向量中的值添加到dataframe的每列中?
我有一个数据帧df如何将命名向量中的值添加到dataframe的每列中?,r,dplyr,R,Dplyr,我有一个数据帧df df <- data.frame(c(4,4,4,4,4,4), c(0,0,0,0,0,0)) colnames(df) <- c("a", "b") 和一个命名向量v,其中名称对应于我的数据帧中的列名 v <- c(0.04, 0.01) names(v) <- c("a", "b") 我的数据框中可能有很多列,vector总是有相应的名称 我想将对应向量中的值添加到列的每个元素中,得到如下结果: > df a b 1
df <- data.frame(c(4,4,4,4,4,4), c(0,0,0,0,0,0))
colnames(df) <- c("a", "b")
和一个命名向量v,其中名称对应于我的数据帧中的列名
v <- c(0.04, 0.01)
names(v) <- c("a", "b")
我的数据框中可能有很多列,vector总是有相应的名称
我想将对应向量中的值添加到列的每个元素中,得到如下结果:
> df
a b
1 4.04 0.01
2 4.04 0.01
3 4.04 0.01
4 4.04 0.01
5 4.04 0.01
6 4.04 0.01
我如何使用dplyr实现这一点?
到目前为止,我只知道
df %>% mutate_all(. = . + v[.])
但这给了我一个错误
Error in mutate_all(., . = . + v[.]) :
argument 2 matches multiple formal arguments
问题是我不知道如何指出对应的列应该被对应的向量改变。我们可以使用
基R
(假设列的顺序相同)
或者使用
tidyverse
library(purrr)
map2_df(df, v[names(df)], `+`)
注意:
mutate\u all
循环通过'df'列,但'v'不是这种情况。使用mutate\u all
我们可以使用base R
(假设列的顺序相同),没有索引来选择与“df”中的列相对应的“v”元素
或者使用
tidyverse
library(purrr)
map2_df(df, v[names(df)], `+`)
注意:
mutate\u all
循环通过'df'列,但'v'不是这种情况。使用mutate\u all
选择与“df”中的列相对应的“v”元素时没有索引。这应作为一般情况:
library(tidyverse)
df <-
tibble(
a = rep(4, 6),
b = rep(0, 6)
)
v <- c(0.04, 0.01)
names(v) <- c("a", "b")
v_df <-
v %>%
enframe() %>%
transmute(name, v_value = value)
df %>%
gather(key = name, value = value, a:b) %>%
left_join(v_df, by = "name") %>%
transmute(name, new_value = value + v_value)
库(tidyverse)
df%
左联合(v_df,by=“name”)%%>%
转换(名称,新值=值+v值)
然后,如果希望数据返回到原始格式,则可以重新展开数据。这应作为一般情况:
library(tidyverse)
df <-
tibble(
a = rep(4, 6),
b = rep(0, 6)
)
v <- c(0.04, 0.01)
names(v) <- c("a", "b")
v_df <-
v %>%
enframe() %>%
transmute(name, v_value = value)
df %>%
gather(key = name, value = value, a:b) %>%
left_join(v_df, by = "name") %>%
transmute(name, new_value = value + v_value)
库(tidyverse)
df%
左联合(v_df,by=“name”)%%>%
转换(名称,新值=值+v值)
然后,如果希望数据返回原始格式,您可以将其重新展开。Better
df[names(v)]我知道这很简单,但没想到会这么简单。非常感谢。有什么方法可以像我的例子中那样进行管道输送吗?@Ааі佐夫斯基你可以做df%>%map2_df(v[names(df)],“+”
Betterdf[names(v)]我知道这很简单,但没想到会这么简单。非常感谢。有什么方法可以像我的例子中那样进行管道输送吗?@Ааіа佐夫斯基你可以做df%>%map2\u df(v[names(df)],“+”
library(tidyverse)
df <-
tibble(
a = rep(4, 6),
b = rep(0, 6)
)
v <- c(0.04, 0.01)
names(v) <- c("a", "b")
v_df <-
v %>%
enframe() %>%
transmute(name, v_value = value)
df %>%
gather(key = name, value = value, a:b) %>%
left_join(v_df, by = "name") %>%
transmute(name, new_value = value + v_value)