访问 R Dataframe 值而不是 Tibble

Posted

技术标签:

【中文标题】访问 R Dataframe 值而不是 Tibble【英文标题】:Access R Dataframe Values Rather than Tibble 【发布时间】:2018-10-04 10:04:10 【问题描述】:

我是一名经验丰富的 Pandas 用户,在将 R 框架中的值插入函数时遇到问题。

以下函数适用于硬编码值

>seq.Date(as.Date('2018-01-01'), as.Date('2018-01-31'), 'days') 

 [1] "2018-01-01" "2018-01-02" "2018-01-03" "2018-01-04" "2018-01-05" "2018-01-06" "2018-01-07"
 [8] "2018-01-08" "2018-01-09" "2018-01-10" "2018-01-11" "2018-01-12" "2018-01-13" "2018-01-14"
[15] "2018-01-15" "2018-01-16" "2018-01-17" "2018-01-18" "2018-01-19" "2018-01-20" "2018-01-21"
[22] "2018-01-22" "2018-01-23" "2018-01-24" "2018-01-25" "2018-01-26" "2018-01-27" "2018-01-28"
[29] "2018-01-29" "2018-01-30" "2018-01-31"

这是我正在使用的数据框的摘录

>df[1,1:2]
# A tibble: 1 x 2
  start_time end_time  
  <date>     <date>    
1 2017-04-27 2017-05-11

将这些值插入“seq.Date”函数时出现错误

> seq.Date(from=df[1,1], to=df[1,2], 'days')
Error in seq.Date(from = df[1, 1], to = df[1, 2], "days") : 
'from' must be a "Date" object

我怀疑这是因为使用 df[x,y] 进行子集化返回的是 tibble 而不是具体值

data.class(df[1,1])
[1] "tbl_df"

我希望得出的是一系列日期。我需要能够将其指向数据框周围的各个位置。

非常感谢您的帮助!

【问题讨论】:

通常不需要直接调用S3方法seq.Date,只需调用seq(),R就会为你分派到正确的方法。 此外,[tibble 实现与常规 data.frames 相比会改变行为。它是defaults to drop = FALSE,所以如果你习惯使用base R,你会被绊倒,默认为drop = TRUE 【参考方案1】:

只需使用双括号:

seq.Date(from=df[[1,1]], to=df[[1,2]], 'days')

【讨论】:

【参考方案2】:

tibble 的提取函数可能不会返回向量,而是返回一列 tibble,使用dplyr::pull 将列提取为向量,如此答案:Extract a dplyr tbl column as a vector

【讨论】:

【参考方案3】:

另一种选择是将`[` 函数中的drop 参数设置为TRUE

如果为 TRUE,则将结果强制转换为可能的最低维度

seq.Date(from = df[1, 1, drop = TRUE], to = df[1, 2, drop = TRUE], 'days')
# [1] "2017-04-27" "2017-04-28" "2017-04-29" "2017-04-30" "2017-05-01" "2017-05-02" "2017-05-03" "2017-05-04" "2017-05-05" "2017-05-06"
#[11] "2017-05-07" "2017-05-08" "2017-05-09" "2017-05-10" "2017-05-11"

数据

df <- tibble(start_time = as.Date('2017-04-27'), 
             end_time = as.Date('2017-05-11'))

【讨论】:

以上是关于访问 R Dataframe 值而不是 Tibble的主要内容,如果未能解决你的问题,请参考以下文章

R使用值而不是公式导入Excel文件(多张)

Pandas str 替换删除整个值而不是替换

pandas 基于值而不是计数的窗口滚动计算

pandas 基于值而不是计数的窗口滚动计算

有没有办法使用 read.csv 从字符串值而不是 R 中的文件读取?

如何在 R Shiny select-Input 中获取特定值而不是选择的打印名称