我有几个数据集,这些数据集包含来自不同地区的350至600个农户的约250个变量。数据非常混乱,并提出了许多分析问题。我是R的新手,因此,对以下内容的任何帮助将不胜感激。
最初,几个列包含多个变量,例如,“输入”列包含多达4个单独的输入(肥料,除草剂,农药和杂种种子)。我使用了该spread()
函数tidyr
来创建4个新变量(Input_1 ... Input_4)。产生的新的“输入”变量看起来像下面的模拟数据框,其中每一行代表一个农户:
Input_1 <- c("Fertilisers", "Fertilisers", "Fertilisers", "Fertilisers", NA)
Input_2 <- c("Hybrid_Seeds", "Hybrid_Seeds", "Pesticides", "Herbicides", NA)
Input_3 <- c(NA, NA, NA, "Pesticides", NA)
Input_4 <- c(NA, NA, NA, "Hybrid_Seeds", NA)
x <- data.frame(Input_1, Input_2, Input_3, Input_4)
x
Input_1 Input_2 Input_3 Input_4
1 Fertilisers Hybrid_Seeds <NA> <NA>
2 Fertilisers Hybrid_Seeds <NA> <NA>
3 Fertilisers Pesticides <NA> <NA>
4 Fertilisers Herbicides Pesticides Hybrid_Seeds
5 <NA> <NA> <NA> <NA>
我希望做的是遍历所有这些新生成的“输入”列,搜索匹配的输入(例如,“杀真菌剂”或“农药”),并将结果以“是/否”的格式输入到每个变量的新变量中。数据集中的四种输入类型(化肥,农药,除草剂和杂种种子)。换句话说,x
上面循环中的结果将为新创建的“是/否”变量生成以下列:
Fertilisers <- c("Yes", "Yes", "Yes", "Yes", "No")
Herbicides <- c("No", "No", "No", "Yes", "No")
Pesticides <- c("No", "No", "Yes", "Yes", "No")
Hybrid_Seeds <- c("Yes", "Yes", "No", "Yes", "No")
x2 <- data.frame(Fertilisers, Herbicides, Pesticides, Hybrid_Seeds)
x2
Fertilisers Herbicides Pesticides Hybrid_Seeds
1 Yes No No Yes
2 Yes No No Yes
3 Yes No Yes No
4 Yes Yes Yes Yes
5 No No No No
它可能会更容易想象什么,我想,当数据帧x
,并x2
合并成一个:
x3 <- data.frame(x, x2)
x3
Input_1 Input_2 Input_3 Input_4 Fertilisers Herbicides
1 Fertilisers Hybrid_Seeds <NA> <NA> Yes No
2 Fertilisers Hybrid_Seeds <NA> <NA> Yes No
3 Fertilisers Pesticides <NA> <NA> Yes No
4 Fertilisers Herbicides Pesticides Hybrid_Seeds Yes Yes
5 <NA> <NA> <NA> <NA> No No
Pesticides Hybrid_Seeds
1 No Yes
2 No Yes
3 Yes No
4 Yes Yes
5 No No
这4种投入按照一定的顺序排列,即如果家庭使用肥料,则肥料将始终是第一个(输入_1),如果同时使用肥料和除草剂,则除草剂将为输入_2(如果他们使用肥料和农药但不使用除草剂,则农药将为Input_2等。如果家庭使用所有4种输入,则它们将按以下顺序显示(请参见上面的第4行):肥料,除草剂,农药,Hybrid_Seeds。
我尝试创建for
循环以遍历所有4个输入变量,查找匹配的字符串,并在关联的新输入变量中输入“是”(例如,如果在任何4个现有的“输入”变量中的一个),但我没有取得太大的成功。
似乎没有apply
家庭解决此问题的方法,但是我很乐意得到纠正。同样,我一般都不熟悉R和编程,因此对您的帮助将不胜感激。我确实有(非常有限的)for
循环经验,但是这个问题对我来说太复杂了,解决这个问题非常关键,因为这是我进行研究的主要障碍。
首先十分感谢。
我们可以用 table
tbl <- table(row(x), as.character(unlist(x)))
最好将其保留为二进制输出,而不要更改为“是/否”,但是如果我们需要转换,则
tbl[] <- c("No", "Yes")[tbl+1]
可以将其转换为 data.frame
as.data.frame.matrix(tbl)
# Fertilisers Herbicides Hybrid_Seeds Pesticides
#1 Yes No Yes No
#2 Yes No Yes No
#3 Yes No No Yes
#4 Yes Yes Yes Yes
#5 No No No No
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句