首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测一行是否等于1,并插入其他列的值

检测一行是否等于1,并插入其他列的值
EN

Stack Overflow用户
提问于 2019-02-16 02:54:39
回答 3查看 46关注 0票数 1

以数据作为输入:

如果stock1stock2列中有一个列的值为com_num列,那么如何检查它们

代码语言:javascript
复制
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)
)

下面是一个预期结果的示例

代码语言:javascript
复制
dframe_ex <- data.frame(
    com = c("col1","em","col1","em"), com_num = c(3.1,2.1,2.1,4.1),
    stock1 = c(3.1,0,2.1,4.1), stock2 = c(3.1,2.1,0,4.1)
)

dframe_ex

   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
EN

回答 3

Stack Overflow用户

发布于 2019-02-16 03:16:59

另一个base R选项

代码语言:javascript
复制
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 
票数 3
EN

Stack Overflow用户

发布于 2019-02-16 03:08:55

我们可以使用dplyr中的mutate_at

代码语言:javascript
复制
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

代码语言:javascript
复制
dframe %>%
  mutate_at(vars(starts_with("stock")), funs(. * 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

使用lapply的基础R解决方案。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-02-16 03:13:02

代码语言:javascript
复制
cols = c("stock1", "stock2")
dframe[cols] = lapply(X = cols, FUN =  function(nm) dframe[nm]*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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54715497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档