通过将变量分解成许多变量来创建新列(在R中) [英] Creating new columns by splitting a variable into many variables (in R)

查看:141
本文介绍了通过将变量分解成许多变量来创建新列(在R中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过在数据框中分割一个向量来创建新的列。



我有这样一个数据框:

  YEAR Variable1 Variable2 
2009 000000 00000001
2010 000000 00000001
2011 000000 00000001
2009 000000 00000002
2010 000000 00000002
2009 000000 00000003
...
2009 100000 10000001
2010 100000 10000001
...
2009 100000 10000011
.. ..

可以看到Variable2与变量1相关(Variable2 = Variable1 +最后两位数:例如01,02,03 ...指示子类别)。我想要将Variant2分成如子类别那么多的变量。结果应该是:

  YEAR Variable1 Variable2 Variable3 Variable4 ... 
2009 000000 00000001 0 0
2010 000000 00000001 0 0
2011 000000 00000001 0 0
2009 000000 0 00000002 0
2010 000000 0 00000002 0
2009 000000 0 0 00000003
...
2009 100000 10000001 0 0
2010 100000 10000001 0 0
...
2009 100000 0 0 0 ... 10000011

你将如何进行?我想我应该尝试在一个循环中重新编码Variable2 ..我尝试通过操纵字符串,但我没有解决问题。

解决方案

这将工作。首先让我们建立数据。

 值< -  paste0(0000000,1:4)
库data.table)
dt< - data.table(val = sample(values,10,replace = TRUE))

一个for循环足以定义新的列。

  for(level_var in dt [ unique(val)]){
dt [,eval(level_var):= ifelse(val == level_var,level_var,0)]
}
pre>

I want to create new columns by splitting a vector in a data frame.

I have such a data frame:

YEAR Variable1 Variable2 
2009 000000    00000001
2010 000000    00000001
2011 000000    00000001
2009 000000    00000002
2010 000000    00000002
2009 000000    00000003
...
2009 100000    10000001
2010 100000    10000001
...
2009 100000    10000011
....

As you can see Variable2 is related to Variable 1 (Variable2=Variable1+last two digits: e.g. 01, 02, 03... indicating subcategories). I want to split Variable2 in so many variables as the subcategories are. The result should be:

YEAR Variable1 Variable2 Variable3 Variable4 ... 
2009 000000    00000001  0         0        
2010 000000    00000001  0         0
2011 000000    00000001  0         0
2009 000000    0         00000002  0
2010 000000    0         00000002  0
2009 000000    0         0         00000003
...
2009 100000    10000001  0         0     
2010 100000    10000001  0         0     
...
2009 100000    0         0         0       ...      10000011 

How would you proceed? I thought I should try to recode Variable2 in a loop.. I tried by manipulating strings, but I didn´t solve the problem..

解决方案

This will work. First let's build the data.

values <- paste0("0000000", 1:4)
library(data.table)
dt <- data.table(val = sample(values, 10, replace = TRUE))

A for loop is enough to define the new columns.

for(level_var in dt[, unique(val)]){
  dt[, eval(level_var) := ifelse(val == level_var, level_var, 0)]
}

这篇关于通过将变量分解成许多变量来创建新列(在R中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆