r - 将多行分类为一个变量

标签 r categories

一个简单的问题,但显然还没有在 StO 中回答。

我有一个很长的数据框,其中 3 列是:

person | trip |  driver
=======================
1       car 
1       bike
1       train
1       walk
2       walk
2       train
2       boat

我想要的是填充“司机”列,如果至少其中一次旅行是由汽车完成的,则它的读数为 1,否则为 0:

person | driver
================
1       1 
1       1
1       1
1       1
2       0
2       0
2       0

我稍微倾向于这样做而不会重复使用花哨的包,但我对大多数流行的包(例如 plyr、data.table、sqldf ....),甚至对证明有帮助的新包都很满意长期来看。

提前致谢,.p.

最佳答案

我们可以使用data.table,将'data.frame'转换为'data.table'(setDT(df1)),我们检查是否有any 'trip' 中按 'person' 分组的 'car',将逻辑输出转换为数字(+0L 或用 as.numeric 包装)并将 (:=) 分配给“驱动程序”列。如果需要,我们可以通过将其分配给 NULL 或通过 [, c(1,3), with=FALSE]

子集来删除“trip”列
library(data.table)
setDT(df1)[, driver := any(trip == 'car')+0L, by = person][, trip := NULL]

或者我们可以使用 max(trip=='car') 而不是 any,正如评论中提到的@Arun

setDT(df1)[, driver := max(trip == 'car'), by = person]

或者使用与上述类似的逻辑,我们group_by 'person' 并使用mutate 创建一个新列并使用select 删除不需要的列>

library(dplyr)
df1 %>%
   group_by(person) %>% 
   mutate(driver= any(trip=='car')+0L) %>%
   select(-trip)

或者使用 base R,我们可以使用 ave 创建“driver”,然后使用 subset 删除“trip”列。

df1$driver <- with(df1, ave(trip=='car', person, FUN=any)+0L)
subset(df1, select=-trip)

关于r - 将多行分类为一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596549/

相关文章:

r - .Rpres(不是 rmarkdown)两列布局在 IE 中不兼容

python - 如何替换 pandas DataFrame 中多个分类中的值

r - 将 RCurl 与 SFTP 一起使用

php - 隐藏添加到特定类别的购物车

wordpress - Woocommerce 自定义产品类别下拉问题

Javascript getElementsByTagName ("input").value 不返回结果

vba - 如何使用宏删除 Outlook 2003 中选定邮件的特定类别?

r - 如何找到只知道 r 中第一个的两个单词模式

r - 将数据框中的列拆分为 R 中的列表

r - 将向量元素解析为 R 中的字符串