如何按特定顺序循环遍历R中数据帧中的行



我想按每行前两列值之和的顺序循环遍历以下数据帧,然后为第三列值分配一个数字。

初始表格:

//tr>
Col 1 Col 2 Col 3
20
5 0
20
0 10
20
10
20 40
15 0

这可以使用单个赋值而不是循环来完成,例如:

#Example data
df <- data.frame(col1 = c(20, 5, 20, 0, 21, 10, 20, 15), col2=c(0,0,0,10,0,0,40,0))
#Add dummy values
df$col3 <- NA
#Assign required values
df$col3[order(df$col1+df$col2)] <- rep(c(20,10,5), c(3,4,1))
df
#  col1 col2 col3
#1   20    0   10
#2    5    0   20
#3   20    0   10
#4    0   10   20
#5   21    0   10
#6   10    0   20
#7   20   40    5
#8   15    0   10

让我们以您给出的示例为例:

df <- data.frame(Col1 = c(20,5,20,0,20,10,20,15),
Col2 = c(0,0,0,10,0,0,40,0))
colnames(df) <- c("Col 1", "Col 2")

然后我们可以这样做:

library(dplyr)
df <- df %>% 
mutate(`Col 3` = `Col 1` + `Col 2`)
col3_values <- sort(df$`Col 3`)

df <- df  %>% 
mutate(`Col 3` = case_when(`Col 3` <= col3_values[[3]] ~ 20,
`Col 3` > col3_values[[3]] & `Col 3` <= col3_values[[7]] ~ 10,
TRUE ~ 5))

输出:

Col 1 Col 2 Col 3
1    20     0    10
2     5     0    20
3    20     0    10
4     0    10    20
5    20     0    10
6    10     0    20
7    20    40     5
8    15     0    10

请注意,最后一行并不是你所期望的,因为总和不是最小的3之一(你之前有一个5和两个10(。

但正如Limey评论的那样,如果你有超过8行,这是行不通的。您必须更改给定值受影响的边界

最新更新