我有这个数据帧(df),并且当“ ID”列与给定向量(idvector)的值匹配时,我需要在“ amountN”列中获取值的向量,因此我创建了一个for循环我通过打印df $ amountN的值进行测试,以检查它们是否确实满足df $ ID条件,并且它们确实可以。这是for循环:
df
amountS amountN ID
64693 0.440 0.55 028
64702 0.360 0.52 028
64708 0.220 0.33 028
64714 0.500 0.27 028
64720 0.280 0.51 028
64726 0.520 0.47 028
64732 0.410 0.25 028
64735 0.090 0.11 028
64741 0.220 0.17 028
64750 0.630 0.48 028
64756 0.430 0.35 028
64762 1.200 0.40 028
65150 4.425 14.95 029
65156 5.035 23.60 029
65163 5.810 26.20 029
idvector <- c("010","025","028")
for(i in seq_len(nrow(df))){
for (j in seq_len(length(idvector))){
if(df$ID[i] == idvector[j]){
print(df$amountN[i])
}
}
}
到现在为止还挺好。但是,我已经尝试了很多事情,通过在最后一行更改函数print()将这些值转换为向量,但是似乎没有任何效果:
for(i in seq_len(nrow(df))){
for (j in seq_len(length(idvector))){
if(df$ID[i] == idvector[j]){
x <- c(df$amountN[i])
}
x
}
}
我还尝试获取df $ amounN的子集,然后使用库中的数据subset
和select
从dplyr
库中将数据转换为矢量,但也没有得到,而是得到NULL:
for(i in seq_len(nrow(df))){
for (j in seq_len(length(idvector))){
if(df$ID[i] == idvector[j]){
x <- subset(df$amountN[i,])
}
x
}
}
我查看了数据,发现值看起来像这样:
[1] 0.55
[1] 0.52
[1] 0.33
[1] 0.27
[1] 0.51
[1] 0.47
[1] 0.25
[1] 0.11
[1] 0.17
[1] 0.48
[1] 0.35
[1] 0.4
他们应该看起来像这样:
[1] 0.55 0.52 0.33 0.27 0.51 0.47 0.25 0.11 0.17 0.48
[11] 0.35 0.40
我确实需要一个向量或一个子集,因此我可以将汇总统计信息和其他统计信息应用于数据,但尚未弄清楚。
我正在使用R版本4.0.3
在中base R
,我们可以使用以下命令更轻松地执行此操作subset
subset(df, ID %in% idvector, select = amountN)$amountN
#[1] 0.55 0.52 0.33 0.27 0.51 0.47 0.25 0.11 0.17 0.48 0.35 0.40
关于OP的代码,我们可以通过将“ x”定义为NULL
向量然后在每个循环内串联“ x”并将其分配回“ x”来解决。另外,请确保“ idvector”具有相同的类型,即也假定它也是数字的
x <- c()
for(i in seq_len(nrow(df))){
for (j in seq_len(length(idvector))){
if(df$ID[i] == idvector[j]){
x <- c(x, df$amountN[i])
}
x
}
}
-输出
x
#[1] 0.55 0.52 0.33 0.27 0.51 0.47 0.25 0.11 0.17 0.48 0.35 0.40
注意:OP代码中的问题是,在删除先前的输出时,每次迭代都会更新“ x”。需要串联
df <- structure(list(amountS = c(0.44, 0.36, 0.22, 0.5, 0.28, 0.52,
0.41, 0.09, 0.22, 0.63, 0.43, 1.2, 4.425, 5.035, 5.81), amountN = c(0.55,
0.52, 0.33, 0.27, 0.51, 0.47, 0.25, 0.11, 0.17, 0.48, 0.35, 0.4,
14.95, 23.6, 26.2), ID = c(28L, 28L, 28L, 28L, 28L, 28L, 28L,
28L, 28L, 28L, 28L, 28L, 29L, 29L, 29L)), class = "data.frame",
row.names = c("64693",
"64702", "64708", "64714", "64720", "64726", "64732", "64735",
"64741", "64750", "64756", "64762", "65150", "65156", "65163"
))
idvector <- c(10, 25, 28)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句