首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中表的基本操作

R中表的基本操作
EN

Stack Overflow用户
提问于 2015-02-25 16:59:10
回答 4查看 74关注 0票数 0

这是非常正确的,但我似乎无法在R中做到这一点,主要是因为我对语言的接触受到严重限制

所以我有一个表格,它是一个奇点矩阵,它的形式是:

代码语言:javascript
复制
rownames    C1  C2  C3  C4
R1          0   1   0   1
R2          0   1   1   0
R3          1   0   1   0
R4          0   0   0   0

所以我想用一种很好的方式来画这个图,我发现的一种方法是,如果我改变矩阵,在数据中显示行名,

因此,在有'1‘的表中,我想用相应的行名替换它

所以我想做的是:

代码语言:javascript
复制
rownames    C1  C2  C3  C4
R1          0   R1  0   R1
R2          0   R2  R2  0
R3          R3  0   R3  0
R4          0   0   0   0

我意识到这是非常简单的事情,但我发现R语言有点难理解。

提前感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-25 17:24:29

如果rownames是一列,则可以:

代码语言:javascript
复制
t(apply(d,1,function(rw) {rw[rw==1] <- rw[1]; rw}))

它将逐行扫描数据帧,并将1替换为来自第一列的相应值。

d是初始数据集:

代码语言:javascript
复制
    d <- structure(list(rownames = structure(1:4, .Label = c("R1", "R2", 
"R3", "R4"), class = "factor"), C1 = c(0L, 0L, 3L, 0L), C2 = c(1L, 
2L, 0L, 0L), C3 = c(0L, 2L, 3L, 0L), C4 = c(1L, 0L, 0L, 0L)), .Names = c("rownames", 
"C1", "C2", "C3", "C4"), row.names = c(NA, -4L), class = "data.frame")
票数 1
EN

Stack Overflow用户

发布于 2015-02-25 17:04:39

这里有一个可能的矢量化解决方案

代码语言:javascript
复制
indx <- which(df == 1, arr.ind = TRUE)
df[indx[order(indx[, 1]), ]] <- rep(row.names(df), rowSums(df))
#    C1 C2 C3 C4
# R1  0 R1  0 R1
# R2  0 R2 R2  0
# R3 R3  0 R3  0
# R4  0  0  0  0

数据

代码语言:javascript
复制
df <- structure(list(C1 = c(0L, 0L, 1L, 0L), C2 = c(1L, 1L, 0L, 0L), 
    C3 = c(0L, 1L, 1L, 0L), C4 = c(1L, 0L, 0L, 0L)), .Names = c("C1", 
"C2", "C3", "C4"), class = "data.frame", row.names = c("R1", 
"R2", "R3", "R4"))
票数 2
EN

Stack Overflow用户

发布于 2015-02-25 17:32:17

代码语言:javascript
复制
df<-structure(list(C1 = c(0L, 0L, 1L, 0L), C2 = c(1L, 1L, 0L, 0L), 
    C3 = c(0L, 1L, 1L, 0L), C4 = c(1L, 0L, 0L, 0L)), .Names = c("C1", 
"C2", "C3", "C4"), row.names = c("R1", "R2", "R3", "R4"), class = "data.frame")

   for(i in 1:ncol(df)){
        df[df[,i]==1,i]<-row.names(df)[which(df[,i]==1)] 
        }
    > df
       C1 C2 C3 C4
    R1  0 R1  0 R1
    R2  0 R2 R2  0
    R3 R3  0 R3  0
    R4  0  0  0  0
    > 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28725003

复制
相关文章

相似问题

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