取消列出R数据帧中的多列

问题描述 投票:1回答:1

我有一个带有多个宏变量值的数据框。当我计算值的对数和对数差的对数时,它会将变量更改为列表,稍后会导致我的脚本出现问题。

示例代码:

#Compute log of relevant macrovariables
macro[,c("hp", "unem", "m1", "inc")] <- log(macro[,c("hp", "unem", "m1", "inc")])
colnames(macro)[2:5] <- paste(colnames(macro)[2:5], "log", sep = "_")

#Computing log differences
macro$ldiff_hp <- c(-diff(macro$hp_log), na.omit) 

我正在尝试取消列出列,并使用以下任一方法将其转换为数字:

#Alternative 1
macro[,15:19]<- unlist(as.numeric(macro[,15:19]))
#Alternative 2
macro[,15:19] <- sapply(macro[,15:19],as.numeric)

它给我以下错误输出:

> macro[,15:19]<- unlist(as.numeric(macro[,15:19]))
Error in unlist(as.numeric(macro[, 15:19])) : 
  (list) object cannot be coerced to type 'double'
r list dataframe double
1个回答
0
投票

使用economics中的ggplot2数据集作为示例数据,并利用dplyr s lag函数,可以按如下方式计算对数差值变量:

library(ggplot2)
library(dplyr)

macro <- ggplot2::economics

vars <- c("uempmed", "psavert")
vars_log <- paste(vars, "log", sep = "_")
vars_ldiff <- paste(vars, "ldiff", sep = "_")

#Compute log of relevant macrovariables
macro[, vars_log] <- sapply(macro[, vars], log)
# Lag values
macro[, vars_ldiff] <- sapply(macro[, vars_log], dplyr::lag)
# First Difference of logs
macro[, vars_ldiff] <- macro[, vars_log] - macro[, vars_ldiff]

macro
#> # A tibble: 574 x 10
#>    date         pce    pop psavert uempmed unemploy uempmed_log psavert_log
#>    <date>     <dbl>  <dbl>   <dbl>   <dbl>    <dbl>       <dbl>       <dbl>
#>  1 1967-07-01  507. 198712    12.6     4.5     2944        1.50        2.53
#>  2 1967-08-01  510. 198911    12.6     4.7     2945        1.55        2.53
#>  3 1967-09-01  516. 199113    11.9     4.6     2958        1.53        2.48
#>  4 1967-10-01  512. 199311    12.9     4.9     3143        1.59        2.56
#>  5 1967-11-01  517. 199498    12.8     4.7     3066        1.55        2.55
#>  6 1967-12-01  525. 199657    11.8     4.8     3018        1.57        2.47
#>  7 1968-01-01  531. 199808    11.7     5.1     2878        1.63        2.46
#>  8 1968-02-01  534. 199920    12.3     4.5     3001        1.50        2.51
#>  9 1968-03-01  544. 200056    11.7     4.1     2877        1.41        2.46
#> 10 1968-04-01  544  200208    12.3     4.6     2709        1.53        2.51
#> # ... with 564 more rows, and 2 more variables: uempmed_ldiff <dbl>,
#> #   psavert_ldiff <dbl>

reprex package(v0.3.0)在2020-03-23创建

© www.soinside.com 2019 - 2024. All rights reserved.