我有活动用户的数据帧,当用户在这个特定日期处于活动状态时,数据帧为1,而当他不在活动状态时为0
我正试图从此修改我的数据帧:
df <- data.frame(userID=c("user123","user124","user125"),
`2021-03-01`=c(1,0,1),
`2021-03-08`=c(1,1,1),
`2021-03-15`=c(0,0,1))
以一种优雅的方式:
df <- data.frame(userID=c("user123", "user125", "user123","user124","user125","user125"),
Active_WeekDate=c("2021-03-01","2021-03-01", "2021-03-08", "2021-03-08","2021-03-08","2021-03-15"))
我找到了这个解决方案,但还有更优雅的方法吗?
library(tidyr)
df <- pivot_longer(df, cols = -userID, names_to="Active_WeekDate")
df <- df[ df$value==1, ]
df <- df[ , c(1,2)]
df
非常感谢您的帮助!
我总是发现dplyr
方法更优雅:
library(tidyverse)
df %>%
pivot_longer(cols = -userID, names_to="Active_WeekDate") %>%
filter(value == 1) %>%
select(1:2) %>%
mutate(Active_WeekDate = gsub("X", "", Active_WeekDate))
输出:
userID Active_WeekDate
<chr> <chr>
1 user123 2021.03.01
2 user123 2021.03.08
3 user124 2021.03.08
4 user125 2021.03.01
5 user125 2021.03.08
6 user125 2021.03.15
这个怎么样?
df <- data.frame(userID=c("user123","user124","user125"),
`2021-03-01`=c(1,0,1),
`2021-03-08`=c(1,1,1),
`2021-03-15`=c(0,0,1))
library(tidyverse)
df %>% pivot_longer(starts_with('X'), names_to = 'Active_week_date',names_prefix = 'X', values_transform = list(value = as.logical)) %>%
filter(value) %>% select(-value)
#> # A tibble: 6 x 2
#> userID Active_week_date
#> <chr> <chr>
#> 1 user123 2021.03.01
#> 2 user123 2021.03.08
#> 3 user124 2021.03.08
#> 4 user125 2021.03.01
#> 5 user125 2021.03.08
#> 6 user125 2021.03.15
创建于2021-06-04由reprex包(v2.0.0(