如何通过从R中给定的列中提取字符来创建列/变量

基思

我的数据集如下所示:

                    key      date   census  
    1: 01_35004_10-14_+_M 11NOV2001 2.934397
    2: 01_35004_10-14_+_M 06JAN2002 3.028231
    3: 01_35004_10-14_+_M 07APR2002 3.180712
    4: 01_35004_10-14_+_M 02JUN2002 3.274546
    5: 01_35004_10-14_+_M 28JUL2002 3.368380
    6: 01_35004_10-14_+_M 22SEP2002 3.462214
    7: 01_35004_10-14_+_M 22DEC2002 3.614694
    8: 01_35004_10-14_+_M 16FEB2003 3.708528
    9: 01_35004_10-14_+_M 13JUL2003 3.954843
    10:01_35004_10-14_+_M 07SEP2003 4.048677

“键”列中的某些字符对应于不同的变量。例如:01是州,35004是邮政编码,10-14是年龄组,+是种族,M是性别

我想提取这些字符中的每个字符以为其创建单独的变量(即,用于填充状态为01的列,用于邮政编码为35004的列等)

这是我的代码:

    Var = c("State","Zip_Code", "Age_Group", "Race", "Gender")
    for(j in Var){
    play$j = gsub("_.*$","",play$key) 
    }

显然,这是不正确的。我希望循环遍历“键”(key)列中的每个观察值,并产生一个变量,并与该变量关联提取的字符。

请帮忙

咖啡因垃圾

尝试

library(tidyr)
df_sep <- separate(df, key, into=c("State","Zip_Code", "Age_Group", "Race", "Gender"), sep="_")

   State Zip_Code Age_Group Race Gender      date   census
1     01    35004     10-14    +      M 11NOV2001 2.934397
2     01    35004     10-14    +      M 06JAN2002 3.028231
3     01    35004     10-14    +      M 07APR2002 3.180712
4     01    35004     10-14    +      M 02JUN2002 3.274546
5     01    35004     10-14    +      M 28JUL2002 3.368380
6     01    35004     10-14    +      M 22SEP2002 3.462214
7     01    35004     10-14    +      M 22DEC2002 3.614694
8     01    35004     10-14    +      M 16FEB2003 3.708528
9     01    35004     10-14    +      M 13JUL2003 3.954843
10    01    35004     10-14    +      M 07SEP2003 4.048677

编辑:好的,在您的评论中您已经清楚地表明,您确实希望有一个通过观察循环的解决方案,这是一种低效的方法,并且由于充分的原因通常被认为是不好的做法。表示反对后,让我向您介绍一种方法:

首先,我们需要用列填充数据框。要使用您的方法,应为:

Var = c("State","Zip_Code", "Age_Group", "Race", "Gender")
for(j in Var){
  df <- within(df, assign(j, NA))
}

但是,一种更有效的方法是:

df[, Var]<- NA

两者都给:

head(df)
                 key      date   census State Zip_Code Age_Group Race Gender
1 01_35004_10-14_+_M 11NOV2001 2.934397    NA       NA        NA   NA     NA
2 01_35004_10-14_+_M 06JAN2002 3.028231    NA       NA        NA   NA     NA
3 01_35004_10-14_+_M 07APR2002 3.180712    NA       NA        NA   NA     NA
4 01_35004_10-14_+_M 02JUN2002 3.274546    NA       NA        NA   NA     NA
5 01_35004_10-14_+_M 28JUL2002 3.368380    NA       NA        NA   NA     NA
6 01_35004_10-14_+_M 22SEP2002 3.462214    NA       NA        NA   NA     NA

现在,对于每个观察,我们都希望将其拆分key为各个组成部分,并在第4至8列中填充相应的元素。这将通过以下方式实现:

df[, Var] <- t(sapply(df$key, function(x) unlist(strsplit(as.character(x[1]), "_"))))

在这里,sapply遍历的元素df$key并将每个元素作为我定义的函数的参数传递,并将结果收集在数组中。

看:

sapply(df$key, function(x) unlist(strsplit(as.character(x[1]), "_")))
     [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]    [,10]  
[1,] "01"    "01"    "01"    "01"    "01"    "01"    "01"    "01"    "01"    "01"   
[2,] "35004" "35004" "35004" "35004" "35004" "35004" "35004" "35004" "35004" "35004"
[3,] "10-14" "10-14" "10-14" "10-14" "10-14" "10-14" "10-14" "10-14" "10-14" "10-14"
[4,] "+"     "+"     "+"     "+"     "+"     "+"     "+"     "+"     "+"     "+"    
[5,] "M"     "M"     "M"     "M"     "M"     "M"     "M"     "M"     "M"     "M"    

对其t()进行转置可确保它“适合”数据框df[, Var],在这里您将看到结果相同:

identical(df[,Var], df_sep[Var])
[1] TRUE

我假设某些条目df$key的格式不同,这就是为什么您可能要首先检查每个值的原因。为此,您可以在sapply调用中修饰该函数

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过从R中给定的列中提取字符来创建列/变量

来自分类Dev

如何从数据框中的列中提取字符串模式,并创建一个包含提取的字符串的新数据框列?

来自分类Dev

如何通过从具有给定字符串且值小于 X 的列中删除所有行来对数据框进行子集化?

来自分类Dev

如何通过从共享首选项中获取字段来创建数据库?

来自分类Dev

通过从R中的列表中提取元素来创建向量

来自分类Dev

从R中给定的向量字符串中提取字符串

来自分类Dev

从变量中提取字符

来自分类Dev

Excel Power Query:通过从其他表中提取数据来添加新列(仅在 Powerquery 中需要解决方案)

来自分类Dev

通过从Oracle中的字符串中选择子字符串来填充列

来自分类Dev

如何通过使用正则表达式从向量列中提取数字来创建新列?

来自分类Dev

在Meteor中,如何通过从MongoDB集合中提取的先前插入的对象来预先填充表单加载?

来自分类Dev

我需要通过从字典中提取信息来创建列表

来自分类Dev

如何在pandas数据框中的列的所有行中提取字符串中的大写单词?

来自分类Dev

如何通过从一列中选择NaN值来创建数据框的子集?

来自分类Dev

如何通过从.net中的用户获取列来从数据库中选择多列

来自分类Dev

如何通过从.net中的用户获取列来从数据库中选择多列

来自分类Dev

如何通过减去给定矩阵中的列来创建新矩阵?

来自分类Dev

如何在Android中提取字符串变量?

来自分类Dev

如何在Go中从interface {}变量中提取字符串?

来自分类Dev

如何从ansible中的ansible regsiter变量中提取字符串

来自分类Dev

通过将变量拆分为多个变量来创建新列(在R中)

来自分类Dev

如何通过从路径中提取主机来将 Apache 配置为反向代理

来自分类Dev

通过从imputeTS函数中提取数据来计算时间序列中的平均缺口大小

来自分类Dev

通过从列中获取值来连接

来自分类Dev

在多列中提取字符串列

来自分类Dev

无法从 df 列中提取字符串

来自分类Dev

如何通过从两个不同的列中获取x轴值来进行绘制?

来自分类Dev

如何通过从ng-repeat值中减去值来设置列值

来自分类Dev

当字典的键匹配时如何从列中提取字符串

Related 相关文章

  1. 1

    如何通过从R中给定的列中提取字符来创建列/变量

  2. 2

    如何从数据框中的列中提取字符串模式,并创建一个包含提取的字符串的新数据框列?

  3. 3

    如何通过从具有给定字符串且值小于 X 的列中删除所有行来对数据框进行子集化?

  4. 4

    如何通过从共享首选项中获取字段来创建数据库?

  5. 5

    通过从R中的列表中提取元素来创建向量

  6. 6

    从R中给定的向量字符串中提取字符串

  7. 7

    从变量中提取字符

  8. 8

    Excel Power Query:通过从其他表中提取数据来添加新列(仅在 Powerquery 中需要解决方案)

  9. 9

    通过从Oracle中的字符串中选择子字符串来填充列

  10. 10

    如何通过使用正则表达式从向量列中提取数字来创建新列?

  11. 11

    在Meteor中,如何通过从MongoDB集合中提取的先前插入的对象来预先填充表单加载?

  12. 12

    我需要通过从字典中提取信息来创建列表

  13. 13

    如何在pandas数据框中的列的所有行中提取字符串中的大写单词?

  14. 14

    如何通过从一列中选择NaN值来创建数据框的子集?

  15. 15

    如何通过从.net中的用户获取列来从数据库中选择多列

  16. 16

    如何通过从.net中的用户获取列来从数据库中选择多列

  17. 17

    如何通过减去给定矩阵中的列来创建新矩阵?

  18. 18

    如何在Android中提取字符串变量?

  19. 19

    如何在Go中从interface {}变量中提取字符串?

  20. 20

    如何从ansible中的ansible regsiter变量中提取字符串

  21. 21

    通过将变量拆分为多个变量来创建新列(在R中)

  22. 22

    如何通过从路径中提取主机来将 Apache 配置为反向代理

  23. 23

    通过从imputeTS函数中提取数据来计算时间序列中的平均缺口大小

  24. 24

    通过从列中获取值来连接

  25. 25

    在多列中提取字符串列

  26. 26

    无法从 df 列中提取字符串

  27. 27

    如何通过从两个不同的列中获取x轴值来进行绘制?

  28. 28

    如何通过从ng-repeat值中减去值来设置列值

  29. 29

    当字典的键匹配时如何从列中提取字符串

热门标签

归档