r-列表列数据帧和行号的条件
我有一个dataframe,其列表列如下:r-列表列数据帧和行号的条件,r,list,dplyr,R,List,Dplyr,我有一个dataframe,其列表列如下: L1 <- data.frame(a = I(list( c(1, 2, 6, 7), c(1, 2, 3, 6, 7), c(2, 3, 5), c(4, 5), c(4, 5, 7), c(6) ))) L1我们使用map2循环遍历list列,并与相应的row\u number()进行比较,以创建两列 library(tidyverse) L1 %>% mutate(n = row_number(),
L1 <- data.frame(a = I(list(
c(1, 2, 6, 7),
c(1, 2, 3, 6, 7),
c(2, 3, 5),
c(4, 5),
c(4, 5, 7),
c(6)
)))
L1我们使用map2
循环遍历list
列,并与相应的row\u number()
进行比较,以创建两列
library(tidyverse)
L1 %>%
mutate(n = row_number(),
col1 = map2_int(a, n, ~ as.integer(any((.x - 1) > .y))),
col2 = map2_int(a, n, ~ as.integer( any((.x - .y) < 0)))) %>%
select(-n)
# a col1 col2
#1 1, 2, 6, 7 1 0
#2 1, 2, 3,.... 1 1
#3 2, 3, 5 1 1
#4 4, 5 0 0
#5 4, 5, 7 1 1
#6 6 0 0
库(tidyverse)
L1%>%
变异(n=行数(),
col1=map2_int(a,n,~as.integer(任意(.x-1)>.y)),
col2=map2_int(a,n,~as.integer(任意(.x-.y<0)))%>%
选择(-n)
#可乐
#1 1, 2, 6, 7 1 0
#2 1, 2, 3,.... 1 1
#3 2, 3, 5 1 1
#4 4, 5 0 0
#5 4, 5, 7 1 1
#6 6 0 0
我们使用map2
循环查看列表
列,并与相应的行编号()进行比较以创建两列
library(tidyverse)
L1 %>%
mutate(n = row_number(),
col1 = map2_int(a, n, ~ as.integer(any((.x - 1) > .y))),
col2 = map2_int(a, n, ~ as.integer( any((.x - .y) < 0)))) %>%
select(-n)
# a col1 col2
#1 1, 2, 6, 7 1 0
#2 1, 2, 3,.... 1 1
#3 2, 3, 5 1 1
#4 4, 5 0 0
#5 4, 5, 7 1 1
#6 6 0 0
库(tidyverse)
L1%>%
变异(n=行数(),
col1=map2_int(a,n,~as.integer(任意(.x-1)>.y)),
col2=map2_int(a,n,~as.integer(任意(.x-.y<0)))%>%
选择(-n)
#可乐
#1 1, 2, 6, 7 1 0
#2 1, 2, 3,.... 1 1
#3 2, 3, 5 1 1
#4 4, 5 0 0
#5 4, 5, 7 1 1
#6 6 0 0
您可以使用sapply等工具进行检查
df <- cbind(L1,
t(
sapply(seq(nrow(L1)), function(i) {
cbind(col1 = any((L1$a[[i]] - i) == 1) + 0,
col2 = any((L1$a[[i]] - i) == -1) + 0)
})
)
)
colnames(df) <- c(colnames(L1), "col1", "col2")
df
a col1 col2
1 1, 2, 6, 7 1 0
2 1, 2, 3,.... 1 1
3 2, 3, 5 0 1
4 4, 5 1 0
5 4, 5, 7 0 1
6 6 0 0
df您可以使用sapply等工具进行检查
df <- cbind(L1,
t(
sapply(seq(nrow(L1)), function(i) {
cbind(col1 = any((L1$a[[i]] - i) == 1) + 0,
col2 = any((L1$a[[i]] - i) == -1) + 0)
})
)
)
colnames(df) <- c(colnames(L1), "col1", "col2")
df
a col1 col2
1 1, 2, 6, 7 1 0
2 1, 2, 3,.... 1 1
3 2, 3, 5 0 1
4 4, 5 1 0
5 4, 5, 7 0 1
6 6 0 0
df第三行列表中没有一个数字不等于4,建议的代码仍然给出了一个1@adl这是因为条件不同,所以any(.x>.y)
应该是any(.x==.y+1)
,而any(.x<.y)
应该是any(.x=.y-1)
?第三行列表中的数字都不等于4,并且建议的代码仍然给出了一个1@adl这是因为条件不同,所以any(.x>.y)
应该是any(.x==.y+1)
,而any(.x<.y)
应该是any(.x=.y-1)
?