如何迭代数据表中的列对以在R中创建新列

时间:2012-10-24 19:43:06

标签: r loops paste complex-numbers

我目前有以下格式的复数数据:

r1,i1,r2,i2,...
-1.74550E-0001,5.04828E-0002,7.37643E-0002,-1.70416E-0001,...
...

并且希望从这些复数的模数中创建新列,我尝试通过以下方式执行此操作:

data=read.table("umatrix.txt", header=T, sep=",")

for (i in 1:43){
  data$paste("m",toString(i), sep = "") = sqrt((data$paste("r",toString(i), sep = "")^2)+(data$paste("i",toString(i), sep = "")^2))
  }

但是这会得到错误:

  

错误:尝试应用非功能

大概是因为paste()不能以这种方式使用datatable $ column语法。如何实现这一目标?

编辑:没关系,使用其他语法修复,如下所示:

for (i in 1:43){
    data[1:43,paste("m",toString(i), sep = "")] = sqrt((data[1:43,paste("r",toString(i), sep = "")]^2)+(data[1:43,paste("i",toString(i), sep = "")]^2))
}

1 个答案:

答案 0 :(得分:3)

要提取列,您可以使用:

dat$column

或:

dat["column",] # Notice the "

paste的结果是一个字符串,因此你需要使用第二种形式,即:

dat[paste(...),]

当您使用第一张表格时:

dat$paste(...)

R正在寻找一个名为dat$paste的函数,该函数不存在,从而导致错误。

请注意,dat$column实际上等于dat[["column"]]。此表单将列提取为矢量。或者,dat["column",]表单不会生成向量,而是带有一列的data.frame。因此,最后一种形式也可用于提取多列:dat[c("a","b"),]