2

几个小时以来,我一直试图弄清楚如何解决 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 很陌生,所以我相信有更好的方法。

4

2 回答 2

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

此外,您可以使用strsplit, 和substrwithsapply如下:

# 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)
于 2013-01-31T07:25:50.237 回答
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
于 2013-01-31T05:34:13.117 回答