Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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
如何使用tidyverse插入介于指定范围和don';t已存在于感兴趣的列中_R_Dplyr_Tidyverse_Mlogit - Fatal编程技术网

如何使用tidyverse插入介于指定范围和don';t已存在于感兴趣的列中

如何使用tidyverse插入介于指定范围和don';t已存在于感兴趣的列中,r,dplyr,tidyverse,mlogit,R,Dplyr,Tidyverse,Mlogit,我有一个包含分组数据的大型TIBLE。每组包括12行。TIBLE的第三列的值必须介于1和12之间。大多数行都填充了第3列中的所有行,但有些行没有。对于那些缺少数据(NA)的行,我喜欢使用dplyr插入正确的值。我的挑战是,第3列中的值不一定是数字顺序,因此我必须找到中不存在的值,然后相应地插入 我准备了一个reprex来演示我要描述的内容。在我的示例中,组B缺少第3列中的最后两个值。列3中唯一不存在的值是4和7。因此,我想找到一种方法来确定可以插入哪些值,然后使用mutate将NA值更新为未使用

我有一个包含分组数据的大型TIBLE。每组包括12行。TIBLE的第三列的值必须介于1和12之间。大多数行都填充了第3列中的所有行,但有些行没有。对于那些缺少数据(NA)的行,我喜欢使用dplyr插入正确的值。我的挑战是,第3列中的值不一定是数字顺序,因此我必须找到中不存在的值,然后相应地插入

我准备了一个reprex来演示我要描述的内容。在我的示例中,组B缺少第3列中的最后两个值。列3中唯一不存在的值是4和7。因此,我想找到一种方法来确定可以插入哪些值,然后使用mutate将NA值更新为未使用的值。这是我努力满足mlogit数据帧数据需求的全部内容

库(tidyverse)
df#U之前#一个tible:24 x 3
#>键y z
#>      
#>1 A 2 1
#>2 A 2 2
#>3 A 2 3
#>4 A 2 4
#>5 A 2 5
#>6 A 2 6
#>7 A 2 7
#>8 A 2 8
#>9 A 2 9
#>10 A 210
#>11 A 2 11
#>12 A 2 12
#>13 B 2 2
#>14 B 2 11
#>15 B 2 3
#>16 B 2 6
#>17 B 2 12
#>18 B 2 8
#>19 B 2 9
#>20B210
#>21 B 2 1
#>22 B 2 5
#>23 B 2 NA
#>24 B 2 NA
df_%之后
分组人(键)
目标:24 x 3
#>键y z
#>      
#>1 A 2 1
#>2 A 2 2
#>3 A 2 3
#>4 A 2 4
#>5 A 2 5
#>6 A 2 6
#>7 A 2 7
#>8 A 2 8
#>9 A 2 9
#>10 A 210
#>11 A 2 11
#>12 A 2 12
#>13 B 2 2
#>14 B 2 11
#>15 B 2 3
#>16 B 2 6
#>17 B 2 12
#>18 B 2 8
#>19 B 2 9
#>20B210
#>21 B 2 1
#>22 B 2 5
#>23 B 2 4
#>24B27

更新:我有一个有效的解决方案,但它丑陋的咕噜声可能会有所帮助


库(tidyverse)
df#U之前#一个tible:24 x 3
#>键y z
#>      
#>1 A 2 1
#>2 A 2 2
#>3 A 2 3
#>4 A 2 4
#>5 A 2 5
#>6 A 2 6
#>7 A 2 7
#>8 A 2 8
#>9 A 2 9
#>10 A 210
#>11 A 2 11
#>12 A 2 12
#>13 B 2 2
#>14 B 2 11
#>15 B 2 3
#>16 B 2 6
#>17 B 2 12
#>18 B 2 8
#>19 B 2 9
#>20B210
#>21 B 2 1
#>22 B 2 5
#>23 B 2 NA
#>24 B 2 NA
获取指数%
分组依据(键)%>%
突变(种子=1)%>%
变异(flag=if_else(!is.na(z),0,seed))%>%
突变(j=标志+滞后(标志))%>%
突变(温度=z)%>%
变异(new_z=if_else(j==1,setdiff(1:12,temp)[1],
如果(j==2,setdiff(1:12,temp)[2],
如果(j==3,setdiff(1:12,temp)[3],
如果(j==4,setdiff(1:12,temp)[4],
如果(j==2,setdiff(1:12,temp)[5],
如果(j==2,setdiff(1:12,temp)[6],
如果(j==2,setdiff(1:12,temp)[7],
如果(j==2,setdiff(1:12,temp)[8],
如果(j==2,setdiff(1:12,temp)[9],
如果(j==2,setdiff(1:12,temp)[2],0升
))))))))))) %>%
变异(z=if_else(is.na(z),as.numeric(new_z),z))%>%
选择(-j,-new_z,-temp,-flag,-seed)%>%
打印(n=24)
#>#tibble:24 x 3
#>#组:键[2]
#>键y z
#>      
#>1 A 2 1
#>2 A 2 2
#>3 A 2 3
#>4 A 2 4
#>5 A 2 5
#>6 A 2 6
#>7 A 2 7
#>8 A 2 8
#>9 A 2 9
#>10 A 210
#>11 A 2 11
#>12 A 2 12
#>13 B 2 2
#>14 B 2 11
#>15 B 2 3
#>16 B 2 6
#>17 B 2 12
#>18 B 2 8
#>19 B 2 9
#>20B210
#>21 B 2 1
#>22 B 2 5
#>23 B 2 4
#>24B27

由(v0.3.0)于2020年5月3日创建,您在评论中的想法是正确的,但您可以使用
replace()
,而不是
if\u else()


我试图找到一种使用setdff来解决这个问题的方法。可能是这样的:mutate(z=if_else(is.na(z),setdiff(1:12,z)[1]),z)),但我似乎无法让它工作。
df_BEFORE %>% 
  group_by(key) %>% 
  mutate(z = replace(z, is.na(z), setdiff(1:12, z)))