相关疑难解决方法(0)

什么.SD代表R中的data.table

.SD看起来很有用,但我真的不知道我在做什么.它代表什么?为什么会有前一段时间(句号).我用它时发生了什么?

我读到: .SD是一个data.table包含x每个组的数据子集,不包括组列.它可以在分组i时,分组by,键控by和_ad hoc_时使用by

这是否意味着女儿data.table被留在内存中进行下一次操作?

r data.table

159
推荐指数
3
解决办法
6万
查看次数

使用另一个数据表中的列中的值更新一个数据表中的一列NA

我在这个主题上看过类似的帖子,但无法理解解决方案.基本上我有一个数据表(DT1)与分数和一些NA.只要有'NA',我想要一个引用另一个数据(DT2)表的过程,该表在两个表(通道)中都有一个公共列,然后使用DT2的得分列值更新DT1中的NA.我正在选择一个数据表类,因为我认为它是一个有效的选择.

DT1

         tract CreditScore    
1: 36107020401         635  
2: 36083052403          NA  
3: 36091062602          NA  
4: 36067013000          NA  
5: 36083052304          NA  
Run Code Online (Sandbox Code Playgroud)

DT2

         tract CreditScore  
1: 36107020401         635  
2: 36083052403         650  
3: 36091062602         335  
4: 36067013000         777  
5: 36083052304         663  
Run Code Online (Sandbox Code Playgroud)

r reference data.table

9
推荐指数
1
解决办法
1562
查看次数

在 data.table 中通过引用组合链接和赋值

是否可以在 data.table 中通过引用结合链接和赋值?

例如,我想这样做:

DT[a == 1][b == 0, c := 2]
Run Code Online (Sandbox Code Playgroud)

但是,这会使原始表保持不变,因为似乎在 DT[a == 1] 之后创建了一个临时表,随后更改并返回了该表。

我宁愿不做

DT[a == 1 & b == 0, c := 2]
Run Code Online (Sandbox Code Playgroud)

因为这很慢,我也宁愿避免

 DT <- DT[a == 1][b == 0, c := 2]
Run Code Online (Sandbox Code Playgroud)

因为我更愿意通过参考进行分配。这个问题是问题 [1] 的一部分,这里没有答案。

[1]使用 data.table 包通过引用进行条件二进制连接和更新

r data.table

6
推荐指数
1
解决办法
641
查看次数

加入多个键和条件更新

我希望能够有条件地更新列,其中一个条件基于多个键上的表连接.有没有其他方法比使用ifelse这样做?

例如,我想根据连接更新标志,但首先排除状态不是NA的地方:

library(data.table)
dt_A <- data.table(key1 = LETTERS[1:6], key2 = (1:6), flag=NA_character_ )
dt_A[4, flag:="exclude"]
dt_B <- data.table(key1 = LETTERS[3:6], key2 = c(3:5,0L)) 

print(dt_A)
   key1 key2    flag
1:    A    1      NA
2:    B    2      NA
3:    C    3      NA
4:    D    4 exclude
5:    E    5      NA
6:    F    6      NA

print(dt_B)
   key1 key2
1:    C    3
2:    D    4
3:    E    5
4:    F    0
Run Code Online (Sandbox Code Playgroud)

使用ifelse达到了正确的结果:

dt_A[dt_B, flag:=ifelse(is.na(flag), "include", flag), on = c("key1","key2"), nomatch=0L]

print(dt_A) …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
0
解决办法
84
查看次数

根据另一个数据表更新data.table

我想更新旧的列data.table基于一个新的data.table,只有当值不NA.

DT_old = data.table(x=rep(c("a","b","c")), y=c(1,3,6), v=1:3, l=c(1,1,1))
DT_old
   x y v l
1: a 1 1 1
2: b 3 2 1
3: c 6 3 1
DT_new = data.table(x=rep(c("b","c",'d')), y=c(9,6,10), v=c(2,NA,10), z=c(9,9,9))
DT_new
   x  y  v z
1: b  9  2 9
2: c  6  NA 9
3: d 10 10 9
Run Code Online (Sandbox Code Playgroud)

我想要输出

   x  y  v z
1: b  9  2 9
2: c  6  3 9
3: d 10 10 9
4: a 1 …
Run Code Online (Sandbox Code Playgroud)

merge r data.table

2
推荐指数
1
解决办法
1481
查看次数

从另一个数据帧更新数据帧行和列的子集

df1 <- data.frame(w = 1:4, x = c("a", "b", "b", "c"), y = NA)
df1$y[df1$x == "c"] = 1
df2 <- data.frame(x = c("a", "b"), y = 1:2, z = 3:4)
Run Code Online (Sandbox Code Playgroud)

我想用df2中的值更新df1以匹配行,包括所有df2列.

预期结果:

df1
  w x  y  z
1 1 a  1  3
2 2 b  2  4
3 3 b  2  4
4 4 c  1 NA
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

# add missing columns from df2 to df1
df1[setdiff(colnames(df2), colnames(df1))] <- NA
# update values in df1 from df2 for matching …
Run Code Online (Sandbox Code Playgroud)

r

2
推荐指数
1
解决办法
511
查看次数

标签 统计

r ×6

data.table ×5

merge ×1

reference ×1