Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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_Dataframe_Dplyr - Fatal编程技术网

r将摘要数据转换为出席/缺席数据

r将摘要数据转换为出席/缺席数据,r,dataframe,dplyr,R,Dataframe,Dplyr,我在多个站点进行了5次存在/不存在度量,并将它们汇总在一起,最后得到了一个类似以下内容的数据框架: df <- data.frame("site" = c("a", "b", "c"), "species1" = c(0, 2, 1), "species2" = c(5, 2, 4)) data.f

我在多个站点进行了5次存在/不存在度量,并将它们汇总在一起,最后得到了一个类似以下内容的数据框架:

df <- data.frame("site" = c("a", "b", "c"), 
                 "species1" = c(0, 2, 1), 
                 "species2" = c(5, 2, 4))
data.frame("site" = ("a", "b", "c"), 
           "species1" = c(0,0,0,0,0, 1,1,0,0,0, 1,0,0,0,0),
           "species2" = c(1,1,1,1,1, 1,1,0,0,0, 1,1,1,1,0))
我可以用以下方法复制每行5次:

df %>% slice(rep(1:n(), each = 5))
但我不知道如何将“2”改为“1,1,0,0”。理想情况下,1和0的顺序(在每个站点内)也是随机的(即“0,0,1,0,1”),但这可能太难了


任何帮助都将不胜感激。

重复行后,您可以将行号与相应列的任何值进行比较,如果当前行号小于该值,则分配1

library(dplyr)

df %>% 
  slice(rep(seq_len(n()), each = 5)) %>%
  group_by(site) %>%
  mutate(across(starts_with('species'), ~+(row_number() <= first(.))))
  #Use mutate_at with old dplyr
  #mutate_at(vars(starts_with('species')), ~+(row_number() <= first(.)))


#   site  species1 species2
#   <chr>    <int>    <int>
# 1 a            0        1
# 2 a            0        1
# 3 a            0        1
# 4 a            0        1
# 5 a            0        1
# 6 b            1        1
# 7 b            1        1
# 8 b            0        0
# 9 b            0        0
#10 b            0        0
#11 c            1        1
#12 c            0        1
#13 c            0        1
#14 c            0        1
#15 c            0        0
库(dplyr)
df%>%
切片(rep(seq_len(n()),每个=5))%>%
分组依据(站点)%>%

突变(通过('species')开始,~+(row\u number()我们也可以使用
uncount

library(dplyr)
library(tidyr)
df %>% 
   uncount(max(species2), .remove = FALSE) %>% 
   group_by(site) %>%
   mutate(across(starts_with('species'), ~ as.integer(row_number() <= first(.))))
# A tibble: 15 x 3
# Groups:   site [3]
#   site  species1 species2
#   <chr>    <int>    <int>
# 1 a            0        1
# 2 a            0        1
# 3 a            0        1
# 4 a            0        1
# 5 a            0        1
# 6 b            1        1
# 7 b            1        1
# 8 b            0        0
# 9 b            0        0
#10 b            0        0
#11 c            1        1
#12 c            0        1
#13 c            0        1
#14 c            0        1
#15 c            0        0
库(dplyr)
图书馆(tidyr)
df%>%
取消计数(最大值(规格2),.remove=FALSE)%>%
分组依据(站点)%>%

mutate(从('species')开始,~as.integer(row_number())太棒了。谢谢你。我似乎总是迷路于mutate。对不起,也许这是不礼貌的礼节。我不是有意冒犯你。我只是觉得使用uncount(我不知道存在)使它成为一个更干净的解决方案。再次感谢你的帮助。