将行和值复制到R中的列时出现问题
我需要复制数据表中的行,并将值解析为列将行和值复制到R中的列时出现问题,r,duplicates,data.table,R,Duplicates,Data.table,我需要复制数据表中的行,并将值解析为列 Table: St Cty Name Crp Plan Ins_ID Yld_ID 13 19 Ber 75 30 NA NA 22273028 21942993 22209124 22213153 22086558 22282068 Output: St Cty Name Crp Plan Ins_ID Yld_ID 13 19 Ber 75 30 222730
Table:
St Cty Name Crp Plan Ins_ID Yld_ID
13 19 Ber 75 30 NA NA
22273028 21942993 22209124 22213153 22086558 22282068
Output:
St Cty Name Crp Plan Ins_ID Yld_ID
13 19 Ber 75 30 22273028 NA
13 19 Ber 75 30 21942993 NA
13 19 Ber 75 30 22209124 NA
13 19 Ber 75 30 22213153 NA
13 19 Ber 75 30 22086558 NA
13 19 Ber 75 30 22282068 NA
如何使用
数据在R中实现这一点。表?这是否实现了您想要的
dta <- structure(list(St = 13L, Cty = 19L, Name = "Ber", Crp = 75L,
Plan = 30L, Ins_ID = NA, Yld_ID = NA), class = "data.frame",
row.names = c(NA, -1L))
dta <- data.table(dta)
Ins_ID <- c(22273028, 21942993, 22209124, 22213153, 22086558, 22282068)
dta.new <- data.table(dta[, 1:5], Ins_ID, Yld_ID=dta[, 7])
dta.new
# St Cty Name Crp Plan Ins_ID Yld_ID.Yld_ID
# 1: 13 19 Ber 75 30 22273028 NA
# 2: 13 19 Ber 75 30 21942993 NA
# 3: 13 19 Ber 75 30 22209124 NA
# 4: 13 19 Ber 75 30 22213153 NA
# 5: 13 19 Ber 75 30 22086558 NA
# 6: 13 19 Ber 75 30 22282068 NA
dta在给定的规范范围内,问题变得非常容易
ins_id_vector <- c(22273028, 21942993, 22209124, 22213153, 22086558, 22282068)
expanded.table <- data.frame(
St = Table$St,
Cty = Table$Cty,
Name = Table$Name,
Crp = Table$Crp,
Plan = Table$Plan,
Ins_ID = ins_id_vector,
Yld_ID = Table$Yld_ID
)
ins\u id\u vector我们可以根据向量的长度重复数据表的行,并将向量分配给列
library(data.table)
setDT(dt)
ins_id <- c(22273028,21942993,22209124,22213153,22086558,22282068)
dt <- dt[rep(1,length(ins_id)), ]
dt[, Ins_ID := ins_id]
dt
# St Cty Name Crp Plan Ins_ID Yld_ID
#1: 13 19 Ber 75 30 22273028 NA
#2: 13 19 Ber 75 30 21942993 NA
#3: 13 19 Ber 75 30 22209124 NA
#4: 13 19 Ber 75 30 22213153 NA
#5: 13 19 Ber 75 30 22086558 NA
#6: 13 19 Ber 75 30 22282068 NA
库(data.table)
setDT(dt)
那一行是数据帧中多行的一部分吗?Ins_ID列表位于何处,它是数据帧中的列还是数据帧外的变量?它是要解析的字符串的向量吗?所有这些都会影响解决方案。向量中的数值来自不同的表。是的,我在这张桌子上只有一行。要复制的行数应等于数字向量的长度。在本例中为6行,因为数字向量中有6个数字。谢谢,但我更喜欢data.table解决方案谢谢,但我更喜欢data.table解决方案
dt <- structure(list(St = 13L, Cty = 19L, Name = structure(1L, .Label = "Ber",
class = "factor"), Crp = 75L, Plan = 30L, Ins_ID = NA, Yld_ID = NA),
class = "data.frame", row.names = c(NA, -1L))