从列表中添加多列 table
Adding multiple columns from a list table
我有两个数据表如下:
> have1
Column1 Column2 Column3
1: 100 200 159
2: 169 506 101
3: 100 200 636
---
123571 456 559 249
123572 654 883 423
> have2
variable value
1: Apple 0.25
2: Orange 2.68
3: Pear 0.11
---
10: Grape 5.27
我要做的是将 'have2'
中的 变量 添加为列,将 值 作为常量添加到'have1'
,所以 'want'
是:
> want
Column1 Column2 Column3 Apple Orange Pear.... Grape
1: 100 200 159 0.25 2.68 0.11 5.27
2: 169 506 101 0.25 2.68 0.11 5.27
3: 100 200 636 0.25 2.68 0.11 5.27
---
123571 456 559 249 0.25 2.68 0.11 5.27
123572 654 883 423 0.25 2.68 0.11 5.27
我希望不使用 dplyr
并坚持使用基数 R 或 data.table
。
这种合并需要适用于不同的 'have1' & 'have2'
和 'want'
集,因此尽量避免手动列出 cbind
中的所有变量(即 cbind(have1, Apple=0.25 etc...)
... )
任何帮助,建议将不胜感激,谢谢!!
library(data.table)
cbind(have1, transpose(have2, make.names = "variable"))
输出
Column1 Column2 Column3 Apple Orange Pear
1: 100 200 159 0.25 2.68 0.11
2: 169 506 101 0.25 2.68 0.11
3: 100 200 636 0.25 2.68 0.11
数据
have1 <- structure(list(Column1 = c(100L, 169L, 100L), Column2 = c(200L,
506L, 200L), Column3 = c(159L, 101L, 636L)), class = c("data.table",
"data.frame"), row.names = c(NA, -3L))
setDT(have1)
have2 <- structure(list(variable = c("Apple", "Orange", "Pear"), value = c(0.25,
2.68, 0.11)), class = c("data.table", "data.frame"), row.names = c(NA,
-3L))
setDT(have2)
另一种选择是:
library(data.table)
have1[, have2$variable := as.list(have2$value)]
have1
#> Column1 Column2 Column3 Apple Orange Pear
#> 1: 100 169 100 0.25 2.68 0.11
#> 2: 200 506 200 0.25 2.68 0.11
#> 3: 159 636 636 0.25 2.68 0.11
#> 4: 200 350 450 0.25 2.68 0.11
# data
have1 <- data.table(Column1 = c(100, 200, 159, 200),
Column2 = c(169,506, 636, 350),
Column3 = c(100, 200, 636, 450))
have2 <- data.table(variable = c("Apple", "Orange", "Pear"),
value = c(0.25, 2.68, 0.11))
由 reprex package (v2.0.1)
于 2022-03-28 创建
我有两个数据表如下:
> have1
Column1 Column2 Column3
1: 100 200 159
2: 169 506 101
3: 100 200 636
---
123571 456 559 249
123572 654 883 423
> have2
variable value
1: Apple 0.25
2: Orange 2.68
3: Pear 0.11
---
10: Grape 5.27
我要做的是将 'have2'
中的 变量 添加为列,将 值 作为常量添加到'have1'
,所以 'want'
是:
> want
Column1 Column2 Column3 Apple Orange Pear.... Grape
1: 100 200 159 0.25 2.68 0.11 5.27
2: 169 506 101 0.25 2.68 0.11 5.27
3: 100 200 636 0.25 2.68 0.11 5.27
---
123571 456 559 249 0.25 2.68 0.11 5.27
123572 654 883 423 0.25 2.68 0.11 5.27
我希望不使用 dplyr
并坚持使用基数 R 或 data.table
。
这种合并需要适用于不同的 'have1' & 'have2'
和 'want'
集,因此尽量避免手动列出 cbind
中的所有变量(即 cbind(have1, Apple=0.25 etc...)
... )
任何帮助,建议将不胜感激,谢谢!!
library(data.table)
cbind(have1, transpose(have2, make.names = "variable"))
输出
Column1 Column2 Column3 Apple Orange Pear
1: 100 200 159 0.25 2.68 0.11
2: 169 506 101 0.25 2.68 0.11
3: 100 200 636 0.25 2.68 0.11
数据
have1 <- structure(list(Column1 = c(100L, 169L, 100L), Column2 = c(200L,
506L, 200L), Column3 = c(159L, 101L, 636L)), class = c("data.table",
"data.frame"), row.names = c(NA, -3L))
setDT(have1)
have2 <- structure(list(variable = c("Apple", "Orange", "Pear"), value = c(0.25,
2.68, 0.11)), class = c("data.table", "data.frame"), row.names = c(NA,
-3L))
setDT(have2)
另一种选择是:
library(data.table)
have1[, have2$variable := as.list(have2$value)]
have1
#> Column1 Column2 Column3 Apple Orange Pear
#> 1: 100 169 100 0.25 2.68 0.11
#> 2: 200 506 200 0.25 2.68 0.11
#> 3: 159 636 636 0.25 2.68 0.11
#> 4: 200 350 450 0.25 2.68 0.11
# data
have1 <- data.table(Column1 = c(100, 200, 159, 200),
Column2 = c(169,506, 636, 350),
Column3 = c(100, 200, 636, 450))
have2 <- data.table(variable = c("Apple", "Orange", "Pear"),
value = c(0.25, 2.68, 0.11))
由 reprex package (v2.0.1)
于 2022-03-28 创建