R 如何在用户id#中应用if-else语句?
我试图创建一个虚拟变量,用于标记参加特定活动的人员的用户id。每个用户id都有多行,我希望此虚拟变量应用于标记用户id的每一行。例如,使用下面的数据集,我希望标记参加“事件b”的每个人的用户id(参加的事件b使用“1”,未参加的事件b使用“0”)。棘手的是,我希望1出现在与“事件b”参与者的用户ID匹配的每一行中 我想使用这个虚拟变量来最终对数据进行子集,以便评估参加特定活动的用户的事件参与模式R 如何在用户id#中应用if-else语句?,r,subset,dummy-variable,R,Subset,Dummy Variable,我试图创建一个虚拟变量,用于标记参加特定活动的人员的用户id。每个用户id都有多行,我希望此虚拟变量应用于标记用户id的每一行。例如,使用下面的数据集,我希望标记参加“事件b”的每个人的用户id(参加的事件b使用“1”,未参加的事件b使用“0”)。棘手的是,我希望1出现在与“事件b”参与者的用户ID匹配的每一行中 我想使用这个虚拟变量来最终对数据进行子集,以便评估参加特定活动的用户的事件参与模式 df<-data.frame(id=(100,100,100,101,101,102,102,
df<-data.frame(id=(100,100,100,101,101,102,102,103,103,103,103),
event=("a","b","c","b","d","a","c","a","c","d","e"))
df据我所知,您想要一个热编码。
您可以将以下代码与插入符号包的dummyVars函数一起使用。然后,使用相应的dplyr函数聚合重复的行
library(caret)
library(dplyr)
df<-data.frame(id=c(100,100,100,101,101,102,102,103,103,103,103),
event=c("a","b","c","b","d","a","c","a","c","d","e"))
dmy <- dummyVars(" ~ .", data = df)
trsf <- data.frame(predict(dmy, newdata = df))
aggregate(.~id, trsf, FUN=sum)
id event.a event.b event.c event.d event.e
1 100 1 1 1 0 0
2 101 0 1 0 1 0
3 102 1 0 1 0 0
4 103 1 0 1 1 1
库(插入符号)
图书馆(dplyr)
df据我所知,您想要一个热编码。
您可以将以下代码与插入符号包的dummyVars函数一起使用。然后,使用相应的dplyr函数聚合重复的行
library(caret)
library(dplyr)
df<-data.frame(id=c(100,100,100,101,101,102,102,103,103,103,103),
event=c("a","b","c","b","d","a","c","a","c","d","e"))
dmy <- dummyVars(" ~ .", data = df)
trsf <- data.frame(predict(dmy, newdata = df))
aggregate(.~id, trsf, FUN=sum)
id event.a event.b event.c event.d event.e
1 100 1 1 1 0 0
2 101 0 1 0 1 0
3 102 1 0 1 0 0
4 103 1 0 1 1 1
库(插入符号)
图书馆(dplyr)
df考虑ifelse
和ave
,迭代事件的唯一值或级别
for(ev in unique(df$event)) { # for(ev in levels(df$event)) {
df[[paste0("event_", ev, "_flag")]] <- with(df, ave(ifelse(event == ev, 1, 0), id, FUN=max))
}
df
# id event event_a_flag event_b_flag event_c_flag event_d_flag event_e_flag
# 1 100 a 1 1 1 0 0
# 2 100 b 1 1 1 0 0
# 3 100 c 1 1 1 0 0
# 4 101 b 0 1 0 1 0
# 5 101 d 0 1 0 1 0
# 6 102 a 1 0 1 0 0
# 7 102 c 1 0 1 0 0
# 8 103 a 1 0 1 1 1
# 9 103 c 1 0 1 1 1
# 10 103 d 1 0 1 1 1
# 11 103 e 1 0 1 1 1
for(ev-in-unique(df$event)){#for(ev-in-levels(df$event)){
df[[paste0(“事件”、“ev”、“U标志”)]考虑ifelse
和ave
,在事件的唯一值或级别上迭代
for(ev in unique(df$event)) { # for(ev in levels(df$event)) {
df[[paste0("event_", ev, "_flag")]] <- with(df, ave(ifelse(event == ev, 1, 0), id, FUN=max))
}
df
# id event event_a_flag event_b_flag event_c_flag event_d_flag event_e_flag
# 1 100 a 1 1 1 0 0
# 2 100 b 1 1 1 0 0
# 3 100 c 1 1 1 0 0
# 4 101 b 0 1 0 1 0
# 5 101 d 0 1 0 1 0
# 6 102 a 1 0 1 0 0
# 7 102 c 1 0 1 0 0
# 8 103 a 1 0 1 1 1
# 9 103 c 1 0 1 1 1
# 10 103 d 1 0 1 1 1
# 11 103 e 1 0 1 1 1
for(ev-in-unique(df$event)){#for(ev-in-levels(df$event)){
df[[paste0(“事件”,ev,“\u标志”)]也许我在使用一种简单的方法。使用dplyr
和tidyr
:
df%>%
变异(值=1)%>%
透视图(名称来自=“事件”,值填充=0)
返回
# A tibble: 4 x 6
id a b c d e
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 100 1 1 1 0 0
2 101 0 1 0 1 0
3 102 1 0 1 0 0
4 103 1 0 1 1 1
#一个tible:4 x 6
id a b c d e
1 100 1 1 1 0 0
2 101 0 1 0 1 0
3 102 1 0 1 0 0
4 103 1 0 1 1 1
也许我在使用一种简单的方法。使用dplyr
和tidyr
:
df%>%
变异(值=1)%>%
透视图(名称来自=“事件”,值填充=0)
返回
# A tibble: 4 x 6
id a b c d e
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 100 1 1 1 0 0
2 101 0 1 0 1 0
3 102 1 0 1 0 0
4 103 1 0 1 1 1
#一个tible:4 x 6
id a b c d e
1 100 1 1 1 0 0
2 101 0 1 0 1 0
3 102 1 0 1 0 0
4 103 1 0 1 1 1