繁体   English   中英

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

[英]Conditionally replacing cell values with value in another column in R

我正在处理R中的大型碰撞数据集,其中每一行代表一个唯一的汽车碰撞(ID)。 每次撞车时,都会有相关的死亡总数。 我也有代表崩溃的汽车组合的列(汽车/汽车,公共汽车/汽车,卡车/汽车)。 每次撞车只能有一种组合的车辆编码为1。

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

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编码。 我最终想按崩溃类型总结死亡人数。

这是我想要我的数据集的样子:

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来获得汽车/汽车,公共汽车/公共汽车的总数非常容易。汽车和卡车/小汽车,填入适当的总数后。

任何建议将不胜感激!

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

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) 
> 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

这是以R为底的方法-

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

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

数据-

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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM