如何在R中新列内的分号分隔符内将几列合并为单列

中国

我想合并几列并创建一个包含列表(或类似python中的字典)的列,这些列用分号分隔。
基本上,我有这个数据框:(空值是缺失值)

ID  Event Category  Start Time  End Time    Account No.   Dosage  Doctor's_ID
1    Stroke          1/1/2011       
1   Admitted         1/6/2011               24287939                  5487
1   Diagnosed        1/25/2011      
6   Diagnosed        1/1/2011       
6   Drug       A     1/2/2011   1/10/2011                  "high"
6   Drug       B     1/7/2011   1/20/2011   35287930      "medium"
10  Drug       A    1/3/2011    1/6/2011                   "low"
10  Drug       B    1/9/2011    1/13/2011                  "high"
10  Stroke          1/8/2011        

我想创建一个attribute合并几列和分号分隔符内的列的列。

输出文件(可以是文本文件)看起来是:

  ID    Event Category  Start Time  End Time    attributes
    1    Stroke          1/1/2011       
    1   Admitted         1/6/2011               Account No.="24287939"; Doctor's_ID="5487"
    1   Diagnosed        1/25/2011      
    6   Diagnosed        1/1/2011       
    6   Drug       A     1/2/2011   1/10/2011   Dosage="high"
    6   Drug       B     1/7/2011   1/20/2011   Account No.="35287930"; Dosage="medium"
    10  Drug       A    1/3/2011    1/6/2011    Dosage="low"
    10  Drug       B    1/9/2011    1/13/2011   Dosage="high"
    10  Stroke          1/8/2011        

我的目的是编写一个文本文件,其中各列由制表符分隔符(“ \ t”)和属性数据(最后一列)分隔,就像列表由“;”分隔。

有关所需输出的更多详细信息,请参见此处http://www.cs.umd.edu/hcil/eventflow/manual/chapter_start.html#1.4

我如何在R中做到这一点?

MKR

一种选择是使用apply函数并为最后3列传递按行数据。好的方面apply是,行数据作为与列名匹配named-vector地方传递给函数name

现在,必须先使用结合name使用valuenamed-vector paste,然后再使用collapse=";"function的参数合并到一个字符串paste0解决方案将是:

cbind(df[1:4],Attribute = 
   apply(df[,5:7],1, function(x)paste0(paste(names(x[!is.na(x)]),x[!is.na(x)], sep = "="),
   collapse = ";")))
# ID Event.Category Start.Time  End.Time                             Attribute
# 1  1         Stroke   1/1/2011      <NA>
# 2  1       Admitted   1/6/2011      <NA> Account.No.=24287939;Doctor.s_ID=5487
# 3  1      Diagnosed  1/25/2011      <NA>
# 4  6      Diagnosed   1/1/2011      <NA>
# 5  6   Drug       A   1/2/2011 1/10/2011                           Dosage=high
# 6  6   Drug       B   1/7/2011 1/20/2011    Account.No.=35287930;Dosage=medium
# 7 10   Drug       A   1/3/2011  1/6/2011                            Dosage=low
# 8 10   Drug       B   1/9/2011 1/13/2011                           Dosage=high
# 9 10         Stroke   1/8/2011      <NA>

数据:

df <- read.table(text =
'ID  "Event Category"  "Start Time"  "End Time"    "Account No."   Dosage  Doctor\'s_ID
1   Stroke          1/1/2011         NA          NA                NA       NA      
1   Admitted         1/6/2011        NA       24287939      NA            5487
1   Diagnosed        1/25/2011      NA          NA                NA       NA
6   Diagnosed        1/1/2011       NA          NA                NA       NA
6   "Drug       A"     1/2/2011   1/10/2011       NA           "high"         NA
6   "Drug       B"     1/7/2011   1/20/2011   35287930      "medium"         NA
10  "Drug       A"    1/3/2011    1/6/2011          NA         "low"         NA
10  "Drug       B"    1/9/2011    1/13/2011         NA         "high"         NA
10  Stroke          1/8/2011        NA          NA                NA       NA',
stringsAsFactors = FALSE, header = TRUE)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用逗号分隔符将多行中的值合并为单行

如何使用分隔符将行合并为一行

如何使csv.writer删除列内的分隔符?

如何在Python中用分隔符将多行文本合并为一行,以大文件(4gb +)分隔它们

如何将 2 行或更多行合并为一行并用逗号分隔符连接一列

如何使用自定义分隔符将多行文件名合并为一个?

用桥将列合并为单列

MS SQL 将选择合并为一个,字符分隔符字符串

Notepad ++-将所有行合并为一个并添加分隔符

用分隔符将多个文件合并为一个文件

在r-分隔符更改中分为几列

如何使用分号分隔符将 Excel (xlsm) 保存为 CSV 文件?

如何使awk忽略双引号内的字段分隔符?

如何避免字符串内的分隔符

String类的split方法将忽略分号分隔符

RegExp 将逗号分隔符替换为分号

如何在特定分隔符内(例如括号内)删除字符串中的特定字符

如何使DictReader打开以分号作为字段分隔符的文件?

在R flextable中,如何在列标题之间添加分隔符

如何在列之间插入分隔符?

替换“”(双引号)内的分隔符(|)

将几列合并为一个(R)

带有字段分隔符的CSV文件合并也出现在引号内

将行合并为单列

R:将两列合并为具有唯一值的单列

fputcsv设置分号分隔符

Spark scala 数据框:将多列合并为单列

将两列合并为上下填充的单列

如何使用分隔符将列拆分为多列,以保留 R 中的行名和其他列?