我有一个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)
任何帮助将不胜感激!谢谢.
您可以使用:=如下更新引用:
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)