首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尊重行名

问尊重行名
EN

Stack Overflow用户
提问于 2018-03-29 11:56:50
回答 2查看 57关注 0票数 0

我来自Python,所以我习惯于处理行名的数据。R的工作方式似乎不同:

代码语言:javascript
复制
x = rbind(c(0, 0), c(1, 1))
rownames(x) = c("a", "b")

y = rbind(c(0, 0), c(1, 1))
rownames(y) = c("b", "a")

然后

代码语言:javascript
复制
> x + y
  [,1] [,2]
a    0    0
b    2    2

这对我来说几乎是危险的;特别是因为新的数据框架又有了行名a和b。为什么要这么做?我怎么能让R尊重行名?

编辑:如果我设置了x = data.frame(x)和y = data.frame(y),问题就不会消失。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-29 12:12:00

这里有一个使用data.frame而不是matrix的解决方案:

双data.frame x和y

代码语言:javascript
复制
x = data.frame(rbind(c(0, 0), c(1, 2)))
y = data.frame(rbind(c(0, 0), c(1, 1)))

指定冒号和行名(列和行的顺序颠倒)

代码语言:javascript
复制
rownames(x) = c("a", "b")
rownames(y) = c("b", "a") 
colnames(x) = c("A", "B")
colnames(y) = c("B", "A")

x
  A B
a 0 0
b 1 2

y
  B A
b 0 0
a 1 1

您想要的输出:

代码语言:javascript
复制
x+y[match(rownames(x),rownames(y)),match(colnames(x),colnames(y))]
  A B
a 1 1
b 1 2
票数 0
EN

Stack Overflow用户

发布于 2018-03-29 12:33:46

首先,这些是矩阵,不是数据帧,但它们都有执行矩阵计算的问题。原因是对于R,矩阵计算是基于使用相同的行号而不是相同的行名。然后,使用方程中第一个矩阵中的行名来查看行名。例如:

代码语言:javascript
复制
> y+x
  [,1] [,2]
b    0    0
a    2    2

现在行名是基于y而不是x的。

如果要将添加的内容基于行名,则应指定行名。

代码语言:javascript
复制
> x["a",] + y["a",]
[1] 1 1
> x["b",] + y["b",]
[1] 1 1

知道了这一点,就可以很容易地生成您想要的矩阵。

代码语言:javascript
复制
> rbind(a = x["a",] + y["a",], b = x["b",] + y["b",])
  [,1] [,2]
a    1    1
b    1    1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49555411

复制
相关文章

相似问题

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