首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中的另一列中有条件地替换单元格值

在R中的另一列中有条件地替换单元格值
EN

Stack Overflow用户
提问于 2019-07-26 14:51:56
回答 2查看 51关注 0票数 0

我正在处理R中的大型碰撞数据集,其中每一行代表一个独特的汽车碰撞(ID)。每一次坠机都有相关的死亡总人数。我也有代表碰撞中汽车组合的专栏(汽车/汽车、公共汽车/汽车、卡车/汽车)。每次碰撞只能有一个组合的车辆编码为1。

这是我的数据集的一个迷你版本:

代码语言:javascript
复制
ID fatalities car/car bus/car truck/car
1     2        0        1       0
2     3        1        0       0
3     1        0        1       0

我想将车祸中车辆的1/0编码改为死亡总数。我最后想总结一下按坠机类型计算的死亡人数。

下面是我希望我的数据集看起来的样子:

代码语言:javascript
复制
ID fatalities car/car bus/car truck/car
1     2        0        2       0
2     3        3        0       0
3     1        0        1       0  

我可以使用ifelse语句,但在我的真实数据集中,有42个可能与撞车事故有关的各方,而不是3人,这将是非常乏味的。我认为,如果填写了适当的总数,就很容易使用colsum来获得汽车/汽车、公共汽车/汽车和卡车/汽车的总数。

任何建议都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-26 15:20:29

如果您有更多的列,只需使用colnames(df)获取列名并将列名提供给.vars参数。

代码语言:javascript
复制
library(dplyr)

df <- tribble(
    ~crash_Id, ~fatalities, ~`car/car`,~`bus/car`,~`truck/car`,
    1,2,0,1,0,
    2,3,1,0,0,
    3,1,0,1,0
)


out <- mutate_at(.tbl = df,
          .vars = c("car/car","bus/car","truck/car"),
          .funs = ~ . * fatalities) 
代码语言:javascript
复制
> out 
# A tibble: 3 x 5
  crash_Id fatalities `car/car` `bus/car` `truck/car`
     <dbl>      <dbl>     <dbl>     <dbl>       <dbl>
1        1          2         0         2           0
2        2          3         3         0           0
3        3          1         0         1           0
票数 0
EN

Stack Overflow用户

发布于 2019-07-26 15:24:28

这是R基地的一条路-

代码语言:javascript
复制
df[-1] <- lapply(df[-1], function(x) x * df$fatalities)
result <- rbind(df, TOTAL = colSums(df))

        fatalities car.car bus.car truck.car
crash 1          2       0       2         0
crash 2          3       3       0         0
crash 3          1       0       1         0
TOTAL            6       3       3         0

注意:,我不建议为分析而构造这样的数据。如果您这样做是为了将结果导出到文件或其他文件中,这是可以的。

数据-

代码语言:javascript
复制
df <- structure(list(fatalities = c(2L, 3L, 1L), car.car = c(0L, 1L, 
0L), bus.car = c(1L, 0L, 1L), truck.car = c(0L, 0L, 0L)), .Names = c("fatalities", 
"car.car", "bus.car", "truck.car"), class = "data.frame", row.names = c("crash 1", 
"crash 2", "crash 3"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57222504

复制
相关文章

相似问题

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