如果我有一个数据框,请说虹膜,我想减去一个具有相同列名的向量,我该怎么做?
df <- structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4),
Sepal.Width = c(3.5, 3, 3.2, 3.1, 3.6, 3.9), Petal.Length = c(1.4,
1.4, 1.3, 1.5, 1.4, 1.7), Petal.Width = c(0.2, 0.2, 0.2,
0.2, 0.2, 0.4)), row.names = c(NA, 6L), class = "data.frame")
vec <- tibble(Sepal.Length = 1, Sepal.Width = 2, Petal.Length = 3, Petal.Width = 4)
我想做这样的事情df - vec
。
答案 0 :(得分:2)
一个选项是unlist
'vec'。这里的“ vec”是tibble
,其中一行。一种方法是使用提供列索引的col
复制'vec'以使长度相等。使用该索引,将复制数据集。一旦尺寸相似,就可以进行减法
df - unlist(vec)[col(df)]
或者使用uncount
,复制tibble
行以获得与'df'相同的尺寸
df - vec %>%
uncount(nrow(df))
答案 1 :(得分:2)
或者:
map_dfc(seq_along(colnames(df)), ~df[[.x]] - vec[[.x]])
答案 2 :(得分:1)
如果愿意
df - vec
返回
Ops.data.frame(df,vec)中的错误: “-”仅适用于大小相等的数据帧
所以一种方法是制作大小相等的数据帧并减去
df - vec[rep(nrow(vec), each = nrow(df)), names(df)]
# Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 4.1 1.5 -1.6 -3.8
#2 3.9 1.0 -1.6 -3.8
#3 3.7 1.2 -1.7 -3.8
#4 3.6 1.1 -1.5 -3.8
#5 4.0 1.6 -1.6 -3.8
#6 4.4 1.9 -1.3 -3.6