python长格式_将data.frame从宽格式改为长格式

三种替代解决方案:

您可以使用与reshape2包中相同的melt函数(这是一个经过扩展和改进的实现)。^来自data.table的{}还有比来自reshape2的melt函数更多的参数。例如,还可以指定变量列的名称:library(data.table)

long

它给出:> long

Code Country year value

1: AFG Afghanistan 1950 20,249

2: ALB Albania 1950 8,097

3: AFG Afghanistan 1951 21,352

4: ALB Albania 1951 8,986

5: AFG Afghanistan 1952 22,532

6: ALB Albania 1952 10,058

7: AFG Afghanistan 1953 23,557

8: ALB Albania 1953 11,123

9: AFG Afghanistan 1954 24,555

10: ALB Albania 1954 12,246

一些替代符号:melt(setDT(wide), id.vars = 1:2, variable.name = "year")

melt(setDT(wide), measure.vars = 3:7, variable.name = "year")

melt(setDT(wide), measure.vars = as.character(1950:1954), variable.name = "year")library(tidyr)

long % gather(year, value, -c(Code, Country))

一些替代符号:wide %>% gather(year, value, -Code, -Country)

wide %>% gather(year, value, -1:-2)

wide %>% gather(year, value, -(1:2))

wide %>% gather(year, value, -1, -2)

wide %>% gather(year, value, 3:7)

wide %>% gather(year, value, `1950`:`1954`)library(reshape2)

long

给出相同结果的一些替代符号:# you can also define the id-variables by column number

melt(wide, id.vars = 1:2)

# as an alternative you can also specify the measure-variables

# all other variables will then be used as id-variables

melt(wide, measure.vars = 3:7)

melt(wide, measure.vars = as.character(1950:1954))

注:reshape2已失效。只有必要的改变,以保持它的起重机将作出。(source)

如果要排除NA值,可以将na.rm = TRUE添加到melt函数以及gather函数中。

数据的另一个问题是R将这些值作为字符值读取(这是数字中,的结果)。你可以用gsub和as.numeric修复它:long$value

或者直接用data.table或dplyr:# data.table

long

id.vars = c("Code","Country"),

variable.name = "year")[, value := as.numeric(gsub(",", "", value))]

# tidyr and dplyr

long % gather(year, value, -c(Code,Country)) %>%

mutate(value = as.numeric(gsub(",", "", value)))

数据:wide

AFG Afghanistan 20,249 21,352 22,532 23,557 24,555

ALB Albania 8,097 8,986 10,058 11,123 12,246", header=TRUE, check.names=FALSE)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值