我有以下data.frame(df)包含每个产品购买概率的不同用户。
ID P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
1 1 .1 .2 .1 .5 .8 NA NA .7 .4 NA
2 2 .4 NA NA .3 .7 .8 NA .5 .8 NA
3 3 .3 .1 NA .9 NA .5 .1 .2 .1 .1
4 4 .5 NA NA NA NA .5 .1 NA NA .1
在我的分析中,我分类了不同的产品类别。
例如,P2,P3,P4和P5与CLASS1相关。
预期输出:我想计算每个产品类别的每个用户的不同方式。
我现在的问题是,在指定的类中没有任何概率的用户(例如此处为user4)。这就是我的计算输出比我的数据帧少的原因。
我正在寻找一种优雅的方法来有效地编码这个问题。
我已经尝试过这样做并因为我的df和我的新变量长度不同而得到错误
df$class1 <- rowMeans(filter(df[,3:6], df$P2 > 0 | df$P3 > 0 | df$P4 > 0 | df$P5 > 0), na.rm=T)
答案 0 :(得分:1)
如果我理解正确的话,那就是dplyr方式:
library(dplyr)
test <- data.frame(P1 = c(0.1, NA, NA), P2 = c(NA, 0.2, 0.3), P3 = c(0.4, 0.5, NA))
test <- test %>% mutate(meanA = rowMeans(select(., P1, P2, P3), na.rm = T))
答案 1 :(得分:0)
df <- structure(list(ID = 1:4, P1 = c(0.1, 0.4, 0.3, 0.5), P2 = c(0.2,
NA, 0.1, NA), P3 = c(0.1, NA, NA, NA), P4 = c(0.5, 0.3, 0.9,
NA), P5 = c(0.8, 0.7, NA, NA), P6 = c(NA, 0.8, 0.5, 0.5), P7 = c(NA,
NA, 0.1, 0.1), P8 = c(0.7, 0.5, 0.2, NA), P9 = c(0.4, 0.8, 0.1,
NA), P10 = c(NA, NA, 0.1, 0.1)), .Names = c("ID", "P1", "P2",
"P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10"), row.names = c(NA,
-4L), class = c("data.table", "data.frame"))
df$class1 <- rowMeans(df[,3:6], na.rm=T)
ID P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 class1
1: 1 0.1 0.2 0.1 0.5 0.8 NA NA 0.7 0.4 NA 0.4
2: 2 0.4 NA NA 0.3 0.7 0.8 NA 0.5 0.8 NA 0.5
3: 3 0.3 0.1 NA 0.9 NA 0.5 0.1 0.2 0.1 0.1 0.5
4: 4 0.5 NA NA NA NA 0.5 0.1 NA NA 0.1 NaN