R:基于现有数据帧上的多个条件创建新数据帧
我需要在现有数据帧上使用多个条件创建一个新的数据帧 我尝试使用dplyr函数,特别是针对多个条件进行总结,但失败了,因为一旦应用了条件,数据集大小就会减小 为了便于解释,下面是我试图实现的一个简单示例R:基于现有数据帧上的多个条件创建新数据帧,r,dataframe,dplyr,R,Dataframe,Dplyr,我需要在现有数据帧上使用多个条件创建一个新的数据帧 我尝试使用dplyr函数,特别是针对多个条件进行总结,但失败了,因为一旦应用了条件,数据集大小就会减小 为了便于解释,下面是我试图实现的一个简单示例 df <- data.frame(User = c("Newton","Newton","Newton","Newton","Newton"), Location = c("A","A","B","A","B"), Move
df <- data.frame(User = c("Newton","Newton","Newton","Newton","Newton"),
Location = c("A","A","B","A","B"),
Movement = c(10,10,20,20,30),
Unit = c(-2,2,2,-2,-1),
Time = c("4-20-2019","4-20-2019","4-21-2019","4-21-2019"
,"4-23-2019"))
dfNew <- data.frame(User = c("Newton","Newton","Newton"),
FromLocation = c("A","A","B"),
ToLocation = c("A","B","B"),
Movement = c(10,20,30),
Units = c(2,2,-1))
df听起来像是dplyr::group_by
和case_当
可能就足够了,但我不确定这些是对您的表的“规则”的正确解释
library(dplyr)
df %>%
group_by(User) %>%
mutate(FromLocation = case_when(Movement == 10 & Unit < 0 ~ "DROP",
Movement == 10 & Unit > 0 ~ Location,
Movement == 20 & Unit < 0 ~ lag(Location),
Movement == 20 & Unit > 0 ~ lead(Location),
Movement == 30 ~ "B",
TRUE ~ "not specified in rules"),
ToLocation = case_when(Movement == 10 & Unit < 0 ~ "DROP",
Movement == 10 & Unit > 0 ~ Location,
Movement == 20 & Unit < 0 ~ lag(Location), # Not given
Movement == 20 & Unit > 0 ~ Location,
Movement == 30 ~ "B",
TRUE ~ "not specified in rules")) %>%
ungroup() %>%
filter(FromLocation != "DROP") %>%
select(User, FromLocation, ToLocation, Movement, Unit)
库(dplyr)
df%>%
分组依据(用户)%>%
变异(当(移动=10且单位<0~“下降”,
移动==10且单位>0~位置,
移动==20且单位<0~滞后(位置),
移动==20且单位>0~领先(位置),
移动==30~“B”,
TRUE~“未在规则中指定”),
ToLocation=case_(移动=10且单位<0~“下降”,
移动==10且单位>0~位置,
移动==20且单位<0~滞后(位置),#未给出
移动==20且单位>0~位置,
移动==30~“B”,
TRUE ~“未在规则中指定”))%%>%
解组()%>%
过滤器(FromLocation!=“DROP”)%>%
选择(用户、从位置、到位置、移动、单位)
结果
# A tibble: 4 x 5
User FromLocation ToLocation Movement Unit
<chr> <chr> <chr> <dbl> <dbl>
1 Newton A A 10 2
2 Newton A B 20 2
3 Newton B B 20 -2
4 Newton B B 30 -1
#一个tible:4 x 5
用户从位置到位置移动单元
1牛顿A 10 2
牛顿A B 20 2
3牛顿B 20-2
4牛顿B 30-1
谢谢,@Jon Spring。这就成功了!在这种程度上使用dplyr为我打开了更多的可能性