如何在数据框中遍历列的子集以创建新变量

JmeCS

我有几个数据集,这些数据集包含来自不同地区的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据条件在数据框中创建新列

来自分类Dev

R:如何在数据框中创建一个新列,从基数上计算观察值对变量具有相同值的次数

来自分类Dev

遍历Pandas数据框的列并创建新变量

来自分类Dev

如何遍历数据框中的列值,取均值并创建新的数据框?

来自分类Dev

如何在具有扩展条件的同时在数据框中创建具有多个条件的新列?

来自分类Dev

如何在熊猫数据框中创建新列

来自分类Dev

如何使用lapply在数据框中创建新变量并将其重命名

来自分类Dev

如何从不同列的行中在数据框中创建新列?

来自分类Dev

如何在遍历熊猫数据框时创建新列和插入行值

来自分类Dev

使用Fuzzywuzzy在数据框中创建新列

来自分类Dev

根据条件在数据框中创建新列

来自分类Dev

以迭代方式在数据框中创建多个新列

来自分类Dev

如何使用python中的循环在数据框中创建新列

来自分类Dev

如何根据单独数据框中的两列结果在数据框中创建新列?

来自分类Dev

如何加快熊猫应用功能在数据框中创建新列?

来自分类常见问题

如何在数据框中按列分组并在循环中创建数据透视表

来自分类Dev

如何在数据框中按列分组并在循环中创建数据透视表

来自分类Dev

如何遍历数据框,创建新列并在python中为其添加值

来自分类Dev

如何遍历数据框,创建新列并在python中为其添加值

来自分类Dev

使用数据子集时如何在data.table中创建新列并计算中位数

来自分类Dev

如何在数据框中创建一个新列,并根据前一列中结果的百分比将其设置为1或0?

来自分类Dev

如何在数据框中创建一个新列,其值表示某个列中的值所属的范围?

来自分类Dev

如何在多种情况下在数据框的新列中填充值

来自分类Dev

如何在数据框中添加变量而不是数字?

来自分类Dev

从多个列中创建虚拟变量并创建新的数据框

来自分类Dev

如何遍历 R 数据框中的列并在每次迭代中使用列名创建新数据框?

来自分类Dev

如何在数据框中创建新列,其中新列的每一行都是所有先前行的乘法

来自分类Dev

如何在数据框python中创建具有特定编号的空列?

来自分类Dev

如何在数据框python中创建具有特定编号的空列?

Related 相关文章

  1. 1

    如何根据条件在数据框中创建新列

  2. 2

    R:如何在数据框中创建一个新列,从基数上计算观察值对变量具有相同值的次数

  3. 3

    遍历Pandas数据框的列并创建新变量

  4. 4

    如何遍历数据框中的列值,取均值并创建新的数据框?

  5. 5

    如何在具有扩展条件的同时在数据框中创建具有多个条件的新列?

  6. 6

    如何在熊猫数据框中创建新列

  7. 7

    如何使用lapply在数据框中创建新变量并将其重命名

  8. 8

    如何从不同列的行中在数据框中创建新列?

  9. 9

    如何在遍历熊猫数据框时创建新列和插入行值

  10. 10

    使用Fuzzywuzzy在数据框中创建新列

  11. 11

    根据条件在数据框中创建新列

  12. 12

    以迭代方式在数据框中创建多个新列

  13. 13

    如何使用python中的循环在数据框中创建新列

  14. 14

    如何根据单独数据框中的两列结果在数据框中创建新列?

  15. 15

    如何加快熊猫应用功能在数据框中创建新列?

  16. 16

    如何在数据框中按列分组并在循环中创建数据透视表

  17. 17

    如何在数据框中按列分组并在循环中创建数据透视表

  18. 18

    如何遍历数据框,创建新列并在python中为其添加值

  19. 19

    如何遍历数据框,创建新列并在python中为其添加值

  20. 20

    使用数据子集时如何在data.table中创建新列并计算中位数

  21. 21

    如何在数据框中创建一个新列,并根据前一列中结果的百分比将其设置为1或0?

  22. 22

    如何在数据框中创建一个新列,其值表示某个列中的值所属的范围?

  23. 23

    如何在多种情况下在数据框的新列中填充值

  24. 24

    如何在数据框中添加变量而不是数字?

  25. 25

    从多个列中创建虚拟变量并创建新的数据框

  26. 26

    如何遍历 R 数据框中的列并在每次迭代中使用列名创建新数据框?

  27. 27

    如何在数据框中创建新列,其中新列的每一行都是所有先前行的乘法

  28. 28

    如何在数据框python中创建具有特定编号的空列?

  29. 29

    如何在数据框python中创建具有特定编号的空列?

热门标签

归档