首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用R整理混合变量和观察值?

如何用R整理混合变量和观察值?
EN

Stack Overflow用户
提问于 2018-01-04 06:00:35
回答 2查看 60关注 0票数 0

我找不到任何解决方案来整理我从html表导入的数据集。这一条将观察值和变量组合成行(噩梦)。

它看起来是这样的:

代码语言:javascript
运行
复制
    w <- c(5,"A",1,2)
x <- c(5,"B",3,4)
y <- c(10,"A",5,6)
z <- c(10,"B",7,8)

df <- data.frame(w,x,y,z)

rownames(df) <- c("temp","cat","obs1", "obs2")
colnames(df) <- NA

df

temp  5  5 10 10
cat   A  B  A  B
obs1  1  3  5  7
obs2  2  4  6  8

变量是temp和cat,而obs1和obs2是观测值。我想要得到的是:

代码语言:javascript
运行
复制
obs   temp cat value
obs1  5    A   1  
obs1  5    B   3  
obs2  5    A   2  
obs2  5    B   4  
obs1  10   A   5  
obs1  10   B   6  
obs2  10   A   7  
obs2  10   B   8

我摆弄了gather()spread()但什么都没做。

有什么建议吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-04 06:20:42

你就不能把它调换一下吗?

代码语言:javascript
运行
复制
library(tidyverse)
w <- c(5,"A",1,2)
x <- c(5,"B",3,4)
y <- c(10,"A",5,6)
z <- c(10,"B",7,8)
df <- data.frame(w,x,y,z)

rownames(df) <- c("temp","cat","obs1", "obs2")
colnames(df) <- NA

t(df) %>% 
  as.data.frame() %>% 
  gather(key = "k", value = "value", "obs1", "obs2") %>% 
  select(-k) %>% 
  arrange(desc(temp))

  temp cat value
1    5   A     1
2    5   B     3
3    5   A     2
4    5   B     4
5   10   A     5
6   10   B     7
7   10   A     6
8   10   B     8
票数 2
EN

Stack Overflow用户

发布于 2018-01-04 14:18:17

一个使用data.table的解决方案。df3是最终输出。

代码语言:javascript
运行
复制
library(data.table)

new_col <- rownames(df)      # Save row names as the new column name
df2 <- transpose(df)         # Transpose the data frame
names(df2) <- new_col        # Assign the column name
setDT(df2)                   # Convert to data.table

# Perform the transformation
df3 <- melt(df2, measure.vars = c("obs1", "obs2"), 
            variable.name = "obs")[
  order(-temp, obs), .(obs, temp, cat, value)
]

# Print df3
df3
#     obs temp cat value
# 1: obs1    5   A     1
# 2: obs1    5   B     3
# 3: obs2    5   A     2
# 4: obs2    5   B     4
# 5: obs1   10   A     5
# 6: obs1   10   B     7
# 7: obs2   10   A     6
# 8: obs2   10   B     8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48085774

复制
相关文章

相似问题

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