r - 如果条件发生在 for 循环中,则选择第 i 个元素
问题描述
我有一个这样的数据框(df):
Rif dd A A A A A B B B B B C C C C C
a1 10 5 8 10 2 6 9 6 5 7 9 1 5 6 4 5
b1 20 12 7 1 5 9 10 5 3 8 7 3 6 1 9 8
c1 100 11 6 8 1 14 1 11 9 3 6 10 8 13 8 4
d1 70 4 3 7 8 11 19 2 6 7 1 20 18 7 10 7
我有一个矢量图
rif <- c(0, 15, 50, 90, 110)
我想在 df 中添加一个列,如果 dd(i) >= rif(i-1) & dd(i)
Rif dd A A A A A B B B B B C C C C C V1
a1 10 5 8 10 2 6 9 6 5 7 9 1 5 6 4 5 8
b1 20 12 7 1 5 9 10 5 3 8 7 3 6 1 9 8 1
c1 100 1 6 8 1 14 1 11 9 3 6 10 8 13 8 4 14
d1 70 4 3 7 8 11 19 2 6 7 1 20 18 7 10 7 8
对于 Bs 和 Cs 列,V2 和 V3 也应该这样做。
ref <- c(0, 15, 50, 90, 110)
for (i in 2:length(ref)) {
for (j in 1:nrow(df)) {
if (df$dd >= ref[i-1] && df$dd< ref[i]) {
df[,"V1"] <- df[j,i]
}
}
}
我收到以下错误:
Error in if (..) :
missing value where TRUE/FALSE needed
可能 if 命令不是正确的。你可以帮帮我吗?
解决方案
我认为您只需要更好地指定行和列:
df <- data.frame(
c("a1","b1","c1","d1")
, c(10,20,100,70), c(5,12,11,4), c(8,7,6,3), c(10,1,8,7), c(2,5,1,8), c(6,9,14,11)
, c(9,10,1,19), c(6,5,11,2), c(5,3,9,6), c(7,8,3,7), c(9,7,6,1)
, c(1,3,10,20), c(5,6,8,18), c(6,1,13,7), c(4,9,8,10), c(5,8,4,7)
)
colnames(df) <- c("Rif", "dd", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C")
ref <- c(0, 15, 50, 90, 110)
for (i in 2:length(ref)) {
for (j in 1:nrow(df)) {
if (df$dd[j] >= ref[i-1] && df$dd[j] < ref[i]) {
df$V1[j] <- df[j,i+2]
df$V2[j] <- df[j,i+2+5]
df$V3[j] <- df[j,i+2+10]
}
}
}
这使:
Rif dd A A A A A B B B B B C C C C C V1 V2 V3
1 a1 10 5 8 10 2 6 9 6 5 7 9 1 5 6 4 5 8 6 5
2 b1 20 12 7 1 5 9 10 5 3 8 7 3 6 1 9 8 1 3 1
3 c1 100 11 6 8 1 14 1 11 9 3 6 10 8 13 8 4 14 6 4
4 d1 70 4 3 7 8 11 19 2 6 7 1 20 18 7 10 7 8 7 10
推荐阅读
- mysql - 从 3 个不同的主题中为一个 id 找到 max(marks),对于第二个 id 类似,依此类推
- angular - Angular 8 延迟加载的路由和守卫
- c# - 如何将参数传递给 ASP.NET Core 布局中的顶部导航栏?
- excel - 如何使用函数填充集合,然后调用集合以填充用户表单中的组合框
- javascript - 向 2d 平台游戏添加重力的问题
- outlook-addin - O365 Outlook 加载项无法加载
- react-native - 如何在导航抽屉上执行注销按钮以将我重定向到登录页面?
- pandas - Dask 的性能比 Pandas 差
- java - Dataset.map() 抛出 ClassCastException
- python-3.x - 为什么函数 1 不调用 fun2