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]