根据来自另一个数据框的值创建新的数据框

布兰科

数据框如下所示:

id pom.1 pom.2 pom.3 pom.4 pom.5 pom.6 pom.7 pom.8
20764422   1   3  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
08049335   4   2   1   5   8   7   9   3
07668511   5   2   7  <NA>  <NA>  <NA>  <NA>  <NA>
20058102   7   4   2  <NA>  <NA>  <NA>  <NA>  <NA>
17318802   6   3   5   1   9   8   2  <NA>

在此数据框中可以找到10个可能值的列表。

我需要创建另一个数据框,该数据框将具有10列,每个列对应列表中的每个值,并将其与原始数据框进行匹配。

新数据框应如下所示:

id c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
20764422 y n y n n n n n n n
08049335 y y y y y n y y y n
07668511 n y n n y n y n n n
20058102 n y n y n n y n n n
17318802 y y y n y y n y y n

其中每一行(c1-c10)应该与值列表中的一个值匹配。每个id的值“ y”和“ n”表示原始数据帧中存在/不存在某些值。

希望这种解释足以理解需要做的事情。

我试图在发布之前找到答案,但是要么找不到答案,要么搜索不够。无论如何,如果我在这里发布了答案,对不起。

提前致谢!

A5C1D2H2I1M1N2O1R2T1

如果可以使用二进制1和0而不是“ y”和“ n”,则可以尝试以下操作。

如果您提供可重现的(dput)或数据,这样有助于我们知道您要处理的是数字变量,字符变量还是因子变量,那么它会有所帮助

library(data.table)
dcast(melt(as.data.table(mydf), "id"), id ~ value)
# Aggregate function missing, defaulting to 'length'
#          id 1 2 3 4 5 6 7 8 9 NA
# 1:  7668511 0 1 0 0 1 0 1 0 0  5
# 2:  8049335 1 1 1 1 1 0 1 1 1  0
# 3: 17318802 1 1 1 0 1 1 0 1 1  1
# 4: 20058102 0 1 0 1 0 0 1 0 0  5
# 5: 20764422 1 0 1 0 0 0 0 0 0  6

如果您确实愿意,可以执行以下操作:

dcast(melt(as.data.table(mydf), "id", na.rm = TRUE)[          ## melt and remove NA
      , value := factor(value, 1:10)],                        ## factor value column 
      id ~ value,                                             ## pivot value by id
      fun.aggregate = function(x) ifelse(is.na(x), "n", "y"), ## get your "y" and "n"
      fill = "n", drop = FALSE)                               ## don't drop missing factors

产生:

##          id 1 2 3 4 5 6 7 8 9 10
## 1: 07668511 n y n n y n y n n  n
## 2: 08049335 y y y y y n y y y  n
## 3: 17318802 y y y n y y n y y  n
## 4: 20058102 n y n y n n y n n  n
## 5: 20764422 y n y n n n n n n  n

更新

这是使用tabulate的“有趣”答案chartr

temp <- `rownames<-`(t(apply(mydf[-1], 1, function(x) tabulate(x, nbins = 10))), mydf[[1]])
temp[] <- chartr("01", "ny", temp)
temp
#          [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# 20764422 "y"  "n"  "y"  "n"  "n"  "n"  "n"  "n"  "n"  "n"  
# 08049335 "y"  "y"  "y"  "y"  "y"  "n"  "y"  "y"  "y"  "n"  
# 07668511 "n"  "y"  "n"  "n"  "y"  "n"  "y"  "n"  "n"  "n"  
# 20058102 "n"  "y"  "n"  "y"  "n"  "n"  "y"  "n"  "n"  "n"  
# 17318802 "y"  "y"  "y"  "n"  "y"  "y"  "n"  "y"  "y"  "n" 

此答案中使用的示例数据(不一定是您所拥有的):

mydf <- structure(list(id = c("20764422", "08049335", "07668511", "20058102", 
    "17318802"), pom.1 = c(1L, 4L, 5L, 7L, 6L), pom.2 = c(3L, 2L, 
    2L, 4L, 3L), pom.3 = c(NA, 1L, 7L, 2L, 5L), pom.4 = c(NA, 5L, 
    NA, NA, 1L), pom.5 = c(NA, 8L, NA, NA, 9L), pom.6 = c(NA, 7L, 
    NA, NA, 8L), pom.7 = c(NA, 9L, NA, NA, 2L), pom.8 = c(NA, 3L, 
    NA, NA, NA)), .Names = c("id", "pom.1", "pom.2", "pom.3", "pom.4", 
    "pom.5", "pom.6", "pom.7", "pom.8"), row.names = c(NA, 5L), class = "data.frame")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R:创建新的数据框行是来自另一个数据框的列

来自分类Dev

Python Pandas:根据另一个数据框的类别值创建新列

来自分类Dev

根据来自另一个数据框的值将数据框拆分为多个数据框

来自分类Dev

根据来自另一个的组值填充一个数据框

来自分类Dev

尝试使用Python / pandas根据来自另一个数据框的一列的内部和创建一个新的数据框

来自分类Dev

根据R中另一个数据框的索引创建一个新的数据框

来自分类Dev

根据来自另一个数据框的值查找数据框值的平均值

来自分类Dev

根据另一个数据集中的列值在一个数据框中创建列

来自分类Dev

R:使用来自另一个数据框的映射在一个数据框中创建一个新列

来自分类Dev

根据与另一个数据框的匹配在数据框中创建新列

来自分类Dev

根据另一个数据框的行值在数据框中添加新列

来自分类Dev

根据条件从另一个数据框的值向数据框添加新列

来自分类Dev

熊猫:根据另一个数据框中的值在数据框中添加新列

来自分类Dev

使用来自另一个数据框的值修改数据框

来自分类Dev

使用来自另一个数据框的值创建新的dask数据框列会导致“块大小未知”错误

来自分类Dev

根据另一个数据框中的值在数据框中创建列表列

来自分类Dev

根据另一个数据框计算数据框中的列值

来自分类Dev

根据条件为另一个数据框的数据框列设置值

来自分类Dev

根据另一个数据框的值对数据框条目进行分组

来自分类Dev

根据另一个数据框中的日期过滤数据框中的值

来自分类Dev

根据另一个数据框的值填充一个数据框的值

来自分类Dev

如何基于另一个数据框创建绘图新的数据框

来自分类Dev

基于另一个数据框按组创建新数据框

来自分类Dev

基于另一个数据框创建新的数据框

来自分类Dev

根据另一个数据框中的值对一个数据框进行子集

来自分类Dev

根据另一个数据框的值删除一个数据框的行和列

来自分类Dev

语言:如何根据另一个数据框在数据框中创建新列?

来自分类Dev

使用另一个数据框的唯一值创建并填充一个数据框

来自分类Dev

使用另一个数据框的行号从现有数据框创建新的pandas数据框

Related 相关文章

  1. 1

    R:创建新的数据框行是来自另一个数据框的列

  2. 2

    Python Pandas:根据另一个数据框的类别值创建新列

  3. 3

    根据来自另一个数据框的值将数据框拆分为多个数据框

  4. 4

    根据来自另一个的组值填充一个数据框

  5. 5

    尝试使用Python / pandas根据来自另一个数据框的一列的内部和创建一个新的数据框

  6. 6

    根据R中另一个数据框的索引创建一个新的数据框

  7. 7

    根据来自另一个数据框的值查找数据框值的平均值

  8. 8

    根据另一个数据集中的列值在一个数据框中创建列

  9. 9

    R:使用来自另一个数据框的映射在一个数据框中创建一个新列

  10. 10

    根据与另一个数据框的匹配在数据框中创建新列

  11. 11

    根据另一个数据框的行值在数据框中添加新列

  12. 12

    根据条件从另一个数据框的值向数据框添加新列

  13. 13

    熊猫:根据另一个数据框中的值在数据框中添加新列

  14. 14

    使用来自另一个数据框的值修改数据框

  15. 15

    使用来自另一个数据框的值创建新的dask数据框列会导致“块大小未知”错误

  16. 16

    根据另一个数据框中的值在数据框中创建列表列

  17. 17

    根据另一个数据框计算数据框中的列值

  18. 18

    根据条件为另一个数据框的数据框列设置值

  19. 19

    根据另一个数据框的值对数据框条目进行分组

  20. 20

    根据另一个数据框中的日期过滤数据框中的值

  21. 21

    根据另一个数据框的值填充一个数据框的值

  22. 22

    如何基于另一个数据框创建绘图新的数据框

  23. 23

    基于另一个数据框按组创建新数据框

  24. 24

    基于另一个数据框创建新的数据框

  25. 25

    根据另一个数据框中的值对一个数据框进行子集

  26. 26

    根据另一个数据框的值删除一个数据框的行和列

  27. 27

    语言:如何根据另一个数据框在数据框中创建新列?

  28. 28

    使用另一个数据框的唯一值创建并填充一个数据框

  29. 29

    使用另一个数据框的行号从现有数据框创建新的pandas数据框

热门标签

归档