【发布时间】:2021-03-17 14:59:08
【问题描述】:
我有这个数据框 (df),当“ID”列与给定向量 (idvector) 的值匹配时,我需要获取列“amountN”中的值的向量,所以我创建了一个我通过打印 df$amountN 的值来测试的 for 循环,以检查它们实际上是否完成了 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 的子集,然后使用来自 dplyr 库的 subset 和 select 将数据转换为向量,但也没有得到,而是得到 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
【问题讨论】:
标签: r dataframe loops iteration