我一直试图弄清楚如何在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很新,所以我相信有更好的方法。
答案 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
此外,您可以使用strsplit
和substr
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
您在矩阵的行中有min
和max
。
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