我正在尝试从特定类型的数据创建列联表.这对于循环等是可行的......但是因为我的最终表将包含超过10E5的单元格,所以我正在寻找一个预先存在的函数.
我的初步数据如下:
PLANT ANIMAL INTERACTIONS
---------------------- ------------------------------- ------------
Tragopogon_pratensis Propylea_quatuordecimpunctata 1
Anthriscus_sylvestris Rhagonycha_nigriventris 3
Anthriscus_sylvestris Sarcophaga_carnaria 2
Heracleum_sphondylium Sarcophaga_carnaria 1
Anthriscus_sylvestris Sarcophaga_variegata 4
Anthriscus_sylvestris Sphaerophoria_interrupta_Gruppe 3
Cerastium_holosteoides Sphaerophoria_interrupta_Gruppe 1
Run Code Online (Sandbox Code Playgroud)
我想创建一个这样的表:
Propylea_quatuordecimpunctata Rhagonycha_nigriventris Sarcophaga_carnaria Sarcophaga_variegata Sphaerophoria_interrupta_Gruppe
---------------------- ----------------------------- ----------------------- ------------------- -------------------- -------------------------------
Tragopogon_pratensis 1 0 0 0 0
Anthriscus_sylvestris 0 3 2 4 3
Heracleum_sphondylium 0 0 1 0 0
Cerastium_holosteoides 0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
也就是说,行中的所有植物物种,列中的所有动物物种,有时没有相互作用(而我的初始数据仅列出发生的相互作用).
我试图获得两个变量的水平的每个组合的计数,"周"和"id".我希望结果将"id"作为行,将"week"作为列,将计数作为值.
到目前为止我尝试过的例子(尝试过其他一些东西,包括添加一个虚拟变量= 1然后再加fun.aggregate = sum上它):
library(plyr)
ddply(data, .(id), dcast, id ~ week, value_var = "id",
fun.aggregate = length, fill = 0, .parallel = TRUE)
Run Code Online (Sandbox Code Playgroud)
但是,我必须做错事,因为这个功能没有完成.有一个更好的方法吗?
输入:
id week
1 1
1 2
1 3
1 1
2 3
Run Code Online (Sandbox Code Playgroud)
输出:
1 2 3
1 2 1 1
2 0 0 1
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个具有二元响应且已使用强制转换的因子列表.
DF2 <- cast(data.frame(DM), id ~ region)
names(DF2)[-1] <- paste("region", names(DF2)[-1], sep = "")
Run Code Online (Sandbox Code Playgroud)
我得到的问题是答案是答案出现的频率,而我正在寻找它是否匹配.
例如,我有:
id region
1 2
1 3
2 2
3 1
3 1
Run Code Online (Sandbox Code Playgroud)
我想要的是:
id region1 region2 region3
1 0 1 1
2 0 1 0
3 1 0 0
Run Code Online (Sandbox Code Playgroud)