使用普通曲线的值将列添加到数据表

时间:2013-01-31 05:18:14

标签: r

我一直试图弄清楚如何在R中解决问题几个小时。希望有人可以提供帮助:

我有以下数据表(仅显示一个示例,称为xout):

       factorx Freq cumFreq   relative 
1    (-2,-1.9]   13      13 0.00132626 
2  (-1.9,-1.8]   18      31 0.00183636 
3  (-1.8,-1.7]   22      53 0.00224444 
4  (-1.7,-1.6]   18      71 0.00183636 
5  (-1.6,-1.5]   22      93 0.00224444 
6  (-1.5,-1.4]   31     124 0.00316262

我正在尝试使用普通曲线的相对频率添加新列。我试图将列factorx拆分为两个名为min和max的列,然后我使用数值传递给dnorm函数。我在r中对字符串操作的所有尝试都失败了。我试着用:

gsub("[^/d]","",strsplit(toString(xout$factorx),",")))

但失败了。我对r很新,所以我相信有更好的方法。

2 个答案:

答案 0 :(得分:1)

如果您肯定想使用sub,那么这是一种方法。您可以使用(.)模式中的regexp捕获所需的组,然后将其选中。

min <- as.numeric(sub("\\((.*),.*$", "\\1", xout$factorx))
> min
# [1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5

max <- as.numeric(sub(".*,(.*)\\]$", "\\1", xout$factorx))
> max
# [1] -1.9 -1.8 -1.7 -1.6 -1.5 -1.4

此外,您可以使用strsplitsubstr sapply,如下所示:

# first convert to character (to use `nchar` and `substr`)
xout$factorx <- as.character(xout$factorx)
# first remove the ( and ] and then split by "," and then convert to numeric
sapply(strsplit(substr(xout$factorx, 2, nchar(xout$factorx)-1), ","), as.numeric)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5
[2,] -1.9 -1.8 -1.7 -1.6 -1.5 -1.4

您在矩阵的行中有minmax

sub的另一种变体:您可以先使用(删除]sub,然后使用strsplit

sapply(strsplit(sub("\\((.*)\\]", "\\1", xout$factorx), ","), as.numeric)

答案 1 :(得分:0)

你能不能做到

data.frame(xout, newCol=c(1,2,3,4,...))

当然,你提供的矢量可以是任何东西。

示例:使用Freq * 4添加新列:

data.frame(xout, FreqFour=xout[[2]]*4)

导致

       factorx Freq cumFreq   relative FreqFour
1    (-2,-1.9]   13      13 0.00132626       52
2  (-1.9,-1.8]   18      31 0.00183636       72
3  (-1.8,-1.7]   22      53 0.00224444       88
4  (-1.7,-1.6]   18      71 0.00183636       72
5  (-1.6,-1.5]   22      93 0.00224444       88
6  (-1.5,-1.4]   31     124 0.00316262      124