如何迭代数据表中的列对以在R中创建新列
我目前有以下形式的复数数据:如何迭代数据表中的列对以在R中创建新列,r,loops,paste,complex-numbers,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$pa
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$列语法一起使用。如何做到这一点
EDIT:Nevermind,使用其他语法修复,如下所示:
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))
}
要提取列,您可以使用:
dat$column
或:
粘贴的结果是一个字符串,因此需要使用第二种形式,即:
dat[paste(...),]
当您像以前一样使用第一个表单时:
dat$paste(...)
R正在寻找一个名为dat$paste
的函数,该函数不存在,导致错误
请注意,
dat$column
实际上等于dat[[“column”]]
。此表单将列提取为向量。或者,dat[“column”,]
表单生成的不是一个向量,而是一个带有一列的data.frame
。最后一种形式也可用于提取多列:dat[c(“a”、“b”),]
要提取一列,您可以使用:
dat$column
或:
粘贴的结果是一个字符串,因此需要使用第二种形式,即:
dat[paste(...),]
当您像以前一样使用第一个表单时:
dat$paste(...)
R正在寻找一个名为dat$paste
的函数,该函数不存在,导致错误
请注意,
dat$column
实际上等于dat[[“column”]]
。此表单将列提取为向量。或者,dat[“column”,]
表单生成的不是一个向量,而是一个带有一列的data.frame
。最后一个表单也可以用来提取多个列:dat[c(“a”,“b”),]
我现在没有时间完全解析它,但是你可以尝试通过[
intead of$
进行索引。谢谢,这确实有效。奇怪的是有这么大的差异。很难搜索[[
和$
关于StackOverflow,但是最近有很多不同的问题,几乎都是常见问题。关于您的数据结构,我会将所有实部和虚部放在一列中,可能还有一个额外的标识列。这样就不需要循环了,您可以使用mod=使用(data,sqrt(r^2)+(i^2))
。我现在没有时间完全解析它,但您可以尝试通过[
链接$
进行索引。谢谢,这确实有效。奇怪的是有这么大的差异。很难搜索[[
和$
关于StackOverflow,但是最近有很多不同的问题,几乎都是常见问题。关于您的数据结构,我会将所有实部和虚部放在一列中,可能还有一个额外的标识列。这样就不需要循环了,您可以使用mod=带有(数据,sqrt(r^2)+(i^2))
。