我正在尝试比较两列不同的数据框架以创建一个新的数据框架。如果第一个col的行的值小于第二个col的行,它将在新列中添加1。值较大时,将添加2,依此类推。
我给你举个例子。我有这个df
static func retrieveCurrentSSID( callback: @escaping ( String? ) -> Void ){
NEHotspotConfigurationManager.shared.getConfiguredSSIDs { ( networkSSIDs ) in
callback( networkSSIDs.first )
}
}
这是行数较少的
df1 <- data.frame(col=c(1,seq(1:9),9,10))
# col
# 1 1
# 2 1
# 3 2
# 4 3
# 5 4
# 6 5
# 7 6
# 8 7
# 9 8
# 10 9
# 11 9
# 12 10
现在,我的愿望输出将类似于以下内容:
df2<-data.frame(col2=c(3,6,8))
# col2
# 1 3
# 2 6
# 3 8
我知道这是一个非常基本的问题,但是如果不使用for循环,我将无法轻松地做到这一点。我虽然要使用# col3
# 1 1
# 2 1
# 3 1
# 4 2
# 5 2
# 6 2
# 7 3
# 8 3
# 9 4
# 10 4
# 11 4
# 12 4
选择第一个元素,然后使用!unique()
来查看是否在第二个元素中,但是不知道如何实现它。
答案 0 :(得分:1)
如果我对您的理解正确,我认为这会起作用:
apply(df1, 1, FUN = function(x) 1 + sum(x >= df2$col2))
# [1] 1 1 1 2 2 2 3 3 4 4 4 4
我们使用apply
遍历df1
的行,然后检查每一行中的值以查看其与col2
中的df2
的比较。
一个dplyr替代方案:
library(dplyr)
df1 %>%
rowwise() %>% # group over each row
mutate(col3 = 1 + sum(col >= df2$col2))
col col3
<dbl> <dbl>
1 1 1
2 1 1
3 2 1
4 3 2
5 4 2
6 5 2
7 6 3
8 7 3
9 8 4
10 9 4
11 9 4
12 10 4
答案 1 :(得分:1)
希望这能帮到你
z <- rep(F,nrow(df1))
z[c(1,df2$col2+1)]<- T
df1$col3 <- cumsum(z)
给出
> df1
col col3
1 1 1
2 1 1
3 2 1
4 3 2
5 4 2
6 5 2
7 6 3
8 7 3
9 8 4
10 9 4
11 9 4
12 10 4