R 检测一行是否等于一行,并插入另一列的值
具有作为输入数据的: 如果R 检测一行是否等于一行,并插入另一列的值,r,dataframe,R,Dataframe,具有作为输入数据的: 如果stock1和stock2列的值为com\u num列,如何检查它们 dframe <- data.frame( com = c("col1","em","col1","em"), com_num = c(3.1,2.1,2.1,4.1), stock1 = c(1,0,1,1), stock2 = c(1,1,0,1) ) dframe我们可以从dplyr使用mutate\u library(dplyr) dframe %>% mu
stock1
和stock2
列的值为com\u num
列,如何检查它们
dframe <- data.frame(
com = c("col1","em","col1","em"), com_num = c(3.1,2.1,2.1,4.1),
stock1 = c(1,0,1,1), stock2 = c(1,1,0,1)
)
dframe我们可以从dplyr
使用mutate\u
library(dplyr)
dframe %>%
mutate_at(vars(starts_with("stock")), funs(ifelse(. == 1, com_num, .)))
# com com_num stock1 stock2
# 1 col1 3.1 3.1 3.1
# 2 em 2.1 0.0 2.1
# 3 col1 2.1 2.1 0.0
# 4 em 4.1 4.1 4.1
或
具有lappy
的基本R解决方案
dframe[grepl("^stock", names(dframe))] <- lapply(dframe[grepl("^stock", names(dframe))],
function(x) x * dframe$com_num)
dframe
# com com_num stock1 stock2
# 1 col1 3.1 3.1 3.1
# 2 em 2.1 0.0 2.1
# 3 col1 2.1 2.1 0.0
# 4 em 4.1 4.1 4.1
dframe[grepl(“^stock”,name(dframe))]我们可以从dplyr
中使用mutate\u
library(dplyr)
dframe %>%
mutate_at(vars(starts_with("stock")), funs(ifelse(. == 1, com_num, .)))
# com com_num stock1 stock2
# 1 col1 3.1 3.1 3.1
# 2 em 2.1 0.0 2.1
# 3 col1 2.1 2.1 0.0
# 4 em 4.1 4.1 4.1
或
具有lappy
的基本R解决方案
dframe[grepl("^stock", names(dframe))] <- lapply(dframe[grepl("^stock", names(dframe))],
function(x) x * dframe$com_num)
dframe
# com com_num stock1 stock2
# 1 col1 3.1 3.1 3.1
# 2 em 2.1 0.0 2.1
# 3 col1 2.1 2.1 0.0
# 4 em 4.1 4.1 4.1
dframe[grepl(“^stock”,name(dframe))]另一个base R
选项
dframe[, 3:4] <- dframe[, 3:4] * dframe[, 2]
dframe
# com com_num stock1 stock2
#1 col1 3.1 3.1 3.1
#2 em 2.1 0.0 2.1
#3 col1 2.1 2.1 0.0
#4 em 4.1 4.1 4.1
dframe[,3:4]另一个base R
选项
dframe[, 3:4] <- dframe[, 3:4] * dframe[, 2]
dframe
# com com_num stock1 stock2
#1 col1 3.1 3.1 3.1
#2 em 2.1 0.0 2.1
#3 col1 2.1 2.1 0.0
#4 em 4.1 4.1 4.1
dframe[,3:4]