r - data.table set仅将数字添加到某些j值

iem*_*bry 0 r data.table

我有一个data.table命名机会,我试图为每个小于100的值添加32.

chance <- data.table(Fe = c(75, 50, 100, 60, 60, 50, 60, 100))

> chance
    Fe
1:  75
2:  50
3: 100
4:  60
5:  60
6:  50
7:  60
8: 100
Run Code Online (Sandbox Code Playgroud)

以下代码是我尝试更改j中的某些行,其中我是真的:

# changing Fe
change <- "Fe"
for (col in change) set(chance, i = which(chance[[col]] < 100), j = col,
value = chance[[col]] + 32L) # Source 3
Run Code Online (Sandbox Code Playgroud)

这是结果错误:

# Warning message:
# In set(chance, i = which(chance[[col]] < 100), j = col, value =
# chance[[col]] +  :
# Supplied 8 items to be assigned to 6 items of column 'Fe' (2 unused)
Run Code Online (Sandbox Code Playgroud)

这是我想要的结果:

> chance
    Fe
1:  107
2:  82
3: 100
4:  92
5:  92
6:  82
7:  92
8: 100
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!谢谢.

chi*_*n12 5

您可以使用:=如下更新引用:

chance[Fe < 100L, Fe := Fe+32L] 
Run Code Online (Sandbox Code Playgroud)

或者您可能有许多要更新的列,您可以set按如下方式使用:

for (col in myCols) {
    idx <- which(chance[[col]] < 100L)
    set(chance, i=idx, j=col, value=chance[[col]][idx] + 32L)
}
Run Code Online (Sandbox Code Playgroud)