r - 如何计算包含字符串的最大值?

标签 r data.table

我想在使用 .SD, max 时保留字符串。

data <- data.table(id = c("a", "a", "b", "c"),
                   s1 = c(1, 3, 2, 2),
                   s2 = c(3, 1, 1, 0),
                   s3 = c(5, 3, 0, 2),
                   ta = c("ba", "bb", "cc", "dd"))

out_data <- data[, lapply(.SD, max), by=id]

期望的输出:

   id s1 s2 s3 ta
1:  a  0  3  5 ba
2:  a  3  0  0 bb
3:  b  2  1  0 cc
4:  c  2  0  2 dd

如何根据id保存ta信息?

最佳答案

我能想到的最好的解决方案是:

colList <- c("s1", "s2", "s3")
out_data <- data[, (colList) := lapply(.SD, function(x) ifelse(x == max(x), x, 0)), by=.(id)]

没有理由指定.SDcols在这个 build 中。如果您要删除 colList部分并简单使用.SDcols它将删除 ta共列。

编辑:正如 @zx8754 正确指出的那样,这也会改变数据的状态,因为 R 将首先执行 <- 右侧的内容。然后将其分配给 out_data 。您可以通过执行以下操作来防止这种情况:

colList <- c("s1", "s2", "s3")
out_data <- copy(data)[, (colList) := lapply(.SD, function(x) ifelse(x == max(x), x, 0)), by=.(id)]

关于r - 如何计算包含字符串的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70783655/

相关文章:

r - 如何计算数据集中每个主题的变量

r - 在事件之前计算行数 - data.table

r - 即使我没有使用 list()、key<-、names<- 或 attr<-,为什么会收到 "Invalid .internal.selfref detected"警告(但没有输出)?

r - 尝试在 R 中使用 tmap 绘制 SpatialLinesDataFrame 时出错

r - data.table join 然后将列添加到现有的 data.frame 中,无需重新复制

python - 如何在 GridSearchCV 中正确选择最佳模型 - sklearn 和 caret 都做错了

r - 在 Ubuntu 16.04 Apache/2.4.18 (Ubuntu) 中安装 RApache : I get some errors

r - 合并和替换两个 data.tables 中的值

r - 增加 Pander 中的列

r - 使用希腊字母命名 R 中的列表元素