我有一个问题。我正在研究在R中构建一个推荐系统,而且我对这门语言还不熟悉。我似乎无法想出以下内容。
我有一个矩阵,如:
eventID g_26 g_27 g_28 g_29 g_30 g_31 g_32 g_33 g_34 g_35 g_36 g_37 g_38 g_39 g_40 g_41 g_42 g_43
1: 1010 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0
2: 1016 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
3: 1019 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
4: 1053 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
5: 1168 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0
6: 1188 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我想要做的是替换所有具有1比1 / sqrt的值(该特定行中的1的总数)。
我正在使用数据表包,如果这样可以更容易。
提前致谢!
答案 0 :(得分:1)
我们可以将数据帧与值相乘。
所有0的数字将保持为0,1的数字将更改为所需的输出
df[-1] * 1/sqrt(rowSums(df==1))
答案 1 :(得分:0)
作为一个例子
m <- matrix(c(1, 1, 0, 1, 0, 0, 1, 0, 0), ncol = 3, byrow = T)
rs <- apply(m,1,sum)
rs <- sqrt(rs)
m <- m/rs
希望有用
答案 2 :(得分:0)
我们可以在.SDcols
中指定感兴趣的列(-1
表示我们选择了除第一列之外的所有列),使用{{获取Data.table子集中每行的总和1}}和Reduce
,取平方根(+
),除以1,乘以data.table(sqrt
)的子集并赋值(.SD
)它到感兴趣的列
:=