Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用不存在的值生成数据帧_R - Fatal编程技术网

R 使用不存在的值生成数据帧

R 使用不存在的值生成数据帧,r,R,我需要以这样一种方式附加到现有数据帧,即如果c1dataframe的c1.b列没有a1向量的值,则需要生成该非当前值 例如: #c1 dataframe and a1 vector c1 <- data.frame(c1.a = c(1),c1.b = c("1a"),c1.c = c(3)) a1 <- c("1a","1b","1c") 我们可以使用setdiff获取'a1'中不是'c1.b'列的名称,然后rep根据'v1'的长度对'df'和'v1'进行复制,rbind使用

我需要以这样一种方式附加到现有数据帧,即如果
c1
dataframe的
c1.b
列没有
a1
向量的值,则需要生成该非当前值

例如:

#c1 dataframe and a1 vector

c1 <- data.frame(c1.a = c(1),c1.b = c("1a"),c1.c = c(3))

a1 <- c("1a","1b","1c")

我们可以使用
setdiff
获取'a1'中不是'c1.b'列的名称,然后
rep
根据'v1'的长度对'df'和'v1'进行复制,
rbind
使用原始的'c1'

v1 <- setdiff(a1, c1$c1.b)
df1 <- df[rep(seq_len(nrow(df)), length(v1)),]
df1$c1.b <- rep(v1, each = nrow(df))
c1 <- rbind(c1, df1)
row.names(c1) <- NULL
c1
#   c1.a c1.b c1.c
#1     1   1a    3
#2     0   1b    0
#3     0   1b    0
#4     0   1b    0
#5     0   1b    0
#6     0   1b    0
#7     0   1c    0
#8     0   1c    0
#9     0   1c    0
#10    0   1c    0
#11    0   1c    0

c1是终点,df只是说明生成值的方式。因此,加速输出为c1@akrunyes-akrun。我创建c1是因为最初它没有a1的所有值,所以后来(预期输出)它被附加到c1上,而没有当前值
> c1
   c1.a c1.b c1.c
1     1   1a    3
2     0   1b    0
3     0   1b    0
4     0   1b    0
5     0   1b    0
6     0   1b    0
7     0   1c    0
8     0   1c    0
9     0   1c    0
10    0   1c    0
11    0   1c    0
v1 <- setdiff(a1, c1$c1.b)
df1 <- df[rep(seq_len(nrow(df)), length(v1)),]
df1$c1.b <- rep(v1, each = nrow(df))
c1 <- rbind(c1, df1)
row.names(c1) <- NULL
c1
#   c1.a c1.b c1.c
#1     1   1a    3
#2     0   1b    0
#3     0   1b    0
#4     0   1b    0
#5     0   1b    0
#6     0   1b    0
#7     0   1c    0
#8     0   1c    0
#9     0   1c    0
#10    0   1c    0
#11    0   1c    0
library(dplyr)
library(tidyr)
df %>%
      mutate(c1.b = list(setdiff(a1, c1$c1.b))) %>% 
      unnest(c(c1.b)) %>%
      bind_rows(c1, .)