我正在处理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来获得汽车/汽车、公共汽车/汽车和卡车/汽车的总数。
任何建议都将不胜感激!
发布于 2019-07-26 15:20:29
如果您有更多的列,只需使用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发布于 2019-07-26 15:24:28
这是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"))https://stackoverflow.com/questions/57222504
复制相似问题