首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Recode和编码变量

Recode和编码变量
EN

Stack Overflow用户
提问于 2016-04-20 12:18:56
回答 2查看 71关注 0票数 1

我正在做网上问卷的输出,在处理数据时遇到了一些困难。这是设置: 200张图像在两个9点的尺度上被评级,总共有400个组合。不幸的是,数据还没有被编码在400个变量中,其值从1到9不等,但是对于每个缩放图像组合,已经编码了9个二进制变量,如下所示:

代码语言:javascript
复制
Part. V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
1     0  0  1  0  0  0  0  0  0  0   1   0   0   0   0   0   0   0
2     0  0  0  0  0  0  1  0  0
3                                0   0   1   0   0   0   0   0   0

如您所见,数据集中也有一些N/A值。这是因为所有400个组合,每个参与者只对一个随机的50。给定400个组合,我们在数据集中共有3600个变量。现在,我想从某种意义上压缩和重新计算这些值,R以9的间隔计算vars,然后根据其在标度上的位置,将二进制1重新编码为1到9的值,然后将所有变量浓缩成400个组合变量。最后,它应该是这样的:

代码语言:javascript
复制
Part. C1 C2
1     3  2 
2     7 
3        3

我已经研究了整形包,但无法确切地找到如何做到这一点。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-20 13:06:39

使用适用的家庭功能:

代码语言:javascript
复制
#dummy data
df <- read.table(text = "
Part.,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16,V17,V18
1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
2,0,0,0,0,0,0,1,0,0,,,,,,,,,
3,,,,,,,,,,0,0,1,0,0,0,0,0,0
", header = TRUE, sep = ",")

# result

# cbind - column bind, put columns side by side
cbind(
  # First column is the "Part." column
  df[, "Part.", drop = FALSE],
  # other columns are coming from below code
  # sapply returns matrix, converting it to data.frame so we can use cbind.
      as.data.frame(
        # get data column index 9 columns each, first 2 to 9, then 10 to 18, etc.
        sapply(seq(2, ncol(df), 9), function(i)
          # for each 9 columns check at which position it is equal to 1,
          # using which() function
          apply(df[, i:(i + 8)], 1, function(j) which(j == 1)))
      )
)

#output
#   Part. V1 V2
# 1     1  3  2
# 2     2  7   
# 3     3     3
票数 1
EN

Stack Overflow用户

发布于 2016-04-20 13:01:57

下面是一个小例子的解决方案。我只做了两个可能的结果。因此,v1 =1对于pic 1,v2 =2对于pic 1,v3 =1对于pic 2.如果您有9个可能的结果,则必须将id <- rep(1:2, each = 2)更改为id <- rep(1:n, each = 9),其中n是图片的总数。还将final <- matrix(nrow = nrow(dat), ncol = ncol(dat)/2)中的2更改为9。

我希望这能帮上忙。

代码语言:javascript
复制
dat <- data.frame(v1 = c(NA,0,1,0), v2 = c(NA,1,0,1), v3 = c(0,1,NA,0), v4 = c(1,0,NA,1))
id <- rep(1:2, each = 2)           
final <- matrix(nrow = nrow(dat), ncol = ncol(dat)/2)

for (i in unique(id)){
  wdat  <- dat[ ,which(id == i)]
   for (j in 1:nrow(wdat)){
     if(is.na(wdat[j,1] )) { 
        final[j,i] <- NA 
     } else {
       final[j,i] <- which(wdat[j, ] == 1)
     }

   }  
}

我的示例的输入和输出:

代码语言:javascript
复制
> dat
  v1 v2 v3 v4
1 NA NA  0  1
2  0  1  1  0
3  1  0 NA NA
4  0  1  0  1

> final
     [,1] [,2]
[1,]   NA    2
[2,]    2    1
[3,]    1   NA
[4,]    2    2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36743580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档