r - 如何将值与 SAS 或 R 中的范围进行比较

标签 r sas

我有一个csv文件,其中一小部分是

Optimal
value     7.35-7.45  4.5-8   5.6-7.9    0
ID         V1        V2      V3         V4
1          7.1       5.5     7.6        218
10         7.8       4.8     6.3        407
50         7.12      5.2     5.4        140

(数据更改 bcs. secret 性)

总共有 125 个主题和大约 50 个变量

我需要为每个变量创建值和范围之间距离的绝对值。所以,例如对于 ID 1:

V1dist = abs(7.1 - 7.35) = .25
V2dist = 0 because 4.5 < 5.5 < 8
V3dist = 0 because 5.6 < 7.6 < 7.9
V4dist = 218 because the optimal value is 0

有些值在范围内 - 它们应该为 0。有些较低,有些较高。

所以,我有两个问题:1) 如何读入数据 2) 如何创建新变量

我可以访问 SAS 和 R(还有 Excel,但是......)

最佳答案

这是一个解决方案。首先,我读取并格式化数据。我阅读了跳过第一行(范围一)的矩阵,然后我阅读了一行(这可以使用 readLines 进行优化)。

dat <- read.table(text='value     7.35-7.45  4.5-8   5.6-7.9    0
ID         V1        V2      V3         V4
1          7.1       5.5     7.6        218
10         7.8       4.8     6.3        407
50         7.12      5.2     5.4        140',header=TRUE,skip=1)
mm <- as.matrix(dat[,-1])
rownames(mm) <- dat[,1]
rngs <- read.table(text='value     7.35-7.45  4.5-8   5.6-7.9    0
ID         V1        V2      V3         V4
1          7.1       5.5     7.6        218
10         7.8       4.8     6.3        407
50         7.12      5.2     5.4        140',nrows=1)
rngs <- lapply(unclass(rngs[1,-1]),
       function(x)as.numeric(unlist(strsplit(as.character(x),'-'))))
names(rngs) <- colnames(mm)

 mm
     V1  V2  V3  V4
1  7.10 5.5 7.6 218
10 7.80 4.8 6.3 407
50 7.12 5.2 5.4 140
> rngs
$V1
[1] 7.35 7.45

$V2
[1] 4.5 8.0

$V3
[1] 5.6 7.9

$V4
[1] 0

然后我将值与范围进行比较。我遍历每一列,并使用嵌套的 ifelse 计算范围。请注意我没有范围的情况,我重复相同的值。

sapply(names(rngs),function(x)
{
  vec <- mm[,x]
  inter <- rngs[[x]]
  if(length(inter)==1) inter <- rep(inter,2)
  ## within interval
  ifelse(mm[,x] < inter[2] & mm[,x] > inter[1],
         0,ifelse(mm[,x] > inter[2], mm[,x]-inter[2], inter[1]-mm[,x]))

})

     V1 V2  V3  V4
1  0.25  0 0.0 218
10 0.35  0 0.0 407
50 0.23  0 0.2 140

关于r - 如何将值与 SAS 或 R 中的范围进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282855/

相关文章:

R从多列绘制x轴标签

programming-languages - 有条件地保留SAS中的变量

python - 根据许多变量转置 Python Dataframe

R Shiny : how to use a dataframe variable from server. R 在 ui.R

r - 组合 geom_tile() 和 facet_grid/facet_wrap 并删除图 block 之间的空间 (ggplot2)

r - 将熔化与矩阵或data.frame一起使用可提供不同的输出

r - Stargazer 中的集群稳健标准误差

sas - 为什么 proc 意味着显示这些 f ?

sas - 自动用缺失值替换离群值

variables - SAS:如何在 IML 语句之间传输变量?