如何根据计算重新编码矩阵中的值?
How to recode values in a matrix based on a calculation?
我有一个问题。我正致力于在 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 的总数)。
我也在使用数据 Table 包,如果这样更容易的话。
提前致谢!
举个例子
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
希望对您有所帮助
我们可以将数据框与值相乘。
所有为 0 的数字将保持为 0,而为 1 的数字将更改为所需的输出
df[-1] * 1/sqrt(rowSums(df==1))
我们可以在.SDcols
中指定感兴趣的列(-1
意味着我们选择了除第一列以外的所有列),得到[=20=的子集中每一行的总和] 与 Reduce
和 +
,取平方根 (sqrt
),除以 1,乘以 data.table 的子集 (.SD
) 并赋值 ( :=
) 它到感兴趣的列
dt[, (2:ncol(dt)) := .SD*1/sqrt(Reduce(`+`, .SD)), .SDcols = -1]
我有一个问题。我正致力于在 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 的总数)。
我也在使用数据 Table 包,如果这样更容易的话。
提前致谢!
举个例子
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
希望对您有所帮助
我们可以将数据框与值相乘。
所有为 0 的数字将保持为 0,而为 1 的数字将更改为所需的输出
df[-1] * 1/sqrt(rowSums(df==1))
我们可以在.SDcols
中指定感兴趣的列(-1
意味着我们选择了除第一列以外的所有列),得到[=20=的子集中每一行的总和] 与 Reduce
和 +
,取平方根 (sqrt
),除以 1,乘以 data.table 的子集 (.SD
) 并赋值 ( :=
) 它到感兴趣的列
dt[, (2:ncol(dt)) := .SD*1/sqrt(Reduce(`+`, .SD)), .SDcols = -1]