如何在数据帧上反转聚合命令?

时间:2016-05-31 19:46:06

标签: r

如果我想转换以下data.frame:

  >M
  name   ID
  a       1
  b,c     2
  d,e     3
  f       4

到这一个:

  >M
 name  ID
 a     1
 b     2
 c     2
 d     3
 e     3
 f     4

如何对第一列的所有元素进行此转换?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用E_USER_DEPRECATED中的/** * Example class * * @property string $foo A foo variable. */ class Example { public function __get($name) { if ($name === 'foo') { trigger_error('Property $foo is deprecated and should no longer be used', E_USER_DEPRECATED); } // ... } }

unnest()

答案 1 :(得分:1)

以下是基础R解决方案:

# split the names into a list
nameList <- strsplit(df$name, split=",")
# get your new data.frame
newdf <- data.frame(names=unlist(nameList), ID=rep(df$ID, sapply(nameList, length)))

这使用rep重复ID,其名称变量的分割次数相同。这意味着如果您还有3个或更多名称,它将起作用。

数据

df <- read.table(header=T, text="name   ID
  a       1
  b,c     2
  d,e     3
  f       4", stringsAsFactors=F)

<强>输出

> newdf
  names ID
1     a  1
2     b  2
3     c  2
4     d  3
5     e  3
6     f  4