考虑这个简单的例子
library(dplyr)
dataframe <- data_frame(id = c(1,2,3,4),
group = c('a','b','c','c'),
value = c(200,400,120,300))
> dataframe
# A tibble: 4 x 3
id group value
<dbl> <chr> <dbl>
1 1 a 200
2 2 b 400
3 3 c 120
4 4 c 300
Run Code Online (Sandbox Code Playgroud)
这个tidyeval函数用于dplyr根据某些输入列聚合我的数据框。
func_tidy <- function(data, mygroup){
quo_var <- enquo(mygroup)
df_agg <- data %>%
group_by(!!quo_var) %>%
summarize(mean = mean(value, na.rm = TRUE),
count = n()) %>%
ungroup()
df_agg
}
Run Code Online (Sandbox Code Playgroud)
现在,这有效
> func_tidy(dataframe, group) …Run Code Online (Sandbox Code Playgroud) 我有一个df按组分组的数据框ID.对于每个组,有一行具有标识其第一个实例的标志'First' == 1.
我最终希望通过admit date对每个组进行排序,但是,我需要将该'First' == 1行作为该组的第一行,而不管其日期.然后我想根据允许日期对剩余的行进行排序.
样品df:
ID admit discharge discharge_location first
20 3-4-2018 3-6-2018 Home 1
20 2-2-2018 2-6-2018 Home 0
20 2-5-2018 2-23-2018 Home 0
30 1-2-2018 2-3-2018 Home 0
30 1-15-2018 1-18-2018 Home 1
30 1-20-2018 1-24-2018 Home 0
Run Code Online (Sandbox Code Playgroud)
预期df:
ID admit discharge discharge_location first
20 3-4-2018 3-6-2018 Home 1
20 2-2-2018 2-6-2018 Home 0
20 2-5-2018 2-23-2018 Home 0
30 1-15-2018 1-18-2018 Home …Run Code Online (Sandbox Code Playgroud) 考虑这个简单的例子
library(stringr)
library(dplyr)
dataframe <- data_frame(text = c('how is the biggest ??',
'really amazing stuff'))
# A tibble: 2 x 1
text
<chr>
1 how is the biggest ??
2 really amazing stuff
Run Code Online (Sandbox Code Playgroud)
我需要基于regex表达式提取一些术语,但仅提取最长的术语。
到目前为止,我只能使用提取第一个匹配项(不需要最长的匹配项)str_extract。
> dataframe %>% mutate(mymatch = str_extract(text, regex('\\w+')))
# A tibble: 2 x 2
text mymatch
<chr> <chr>
1 how is the biggest ?? how
2 really amazing stuff really
Run Code Online (Sandbox Code Playgroud)
我尝试一起玩,str_extract_all但是找不到有效的语法。输出应为:
# A tibble: 2 x 2
text …Run Code Online (Sandbox Code Playgroud) 考虑这个简单的例子
library(tidyverse)
tibble(x = as.factor(c('good', 'neutral', 'bad')),
y = as.factor(c('bad', 'neutral', 'bad'))) %>%
ggplot(aes(x = x, y = y)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
我想提出的X标签(good,neutral,bad)以不同的颜色框。例如,good(在x轴和y轴上)将被一个小绿色框包围,依此类推。
我可以在里面做ggplot2吗?
我有一个csv.gz文件,其内容如下所示:
bogusfile <- '1,2,3
1,2,3
2,,3
1,2,3,4
1,2,3
1,2,3
1,2,3'
Run Code Online (Sandbox Code Playgroud)
我知道只有3列,但有时会弹出一个额外的伪造的第4列,使我的解析混乱fread。
幸运的是cmd在中有一个命令fread。我们如何使用它来丢弃包含恰好超过2个逗号的所有行(这些行会带有多余的列)。
像fread(cmd = ' linux magic to clean myfile.csv.gz')什么?
我无法使其工作。你怎么看?谢谢!
我有两个看起来像这样的数据帧:
df_1 = pd.DataFrame({
'A' : [1.0, 2.0, 3.0, 4.0],
'B' : [100, 200, 300, 400],
'C' : [2, 3, 4, 5]
})
df_2 = pd.DataFrame({
'B' : [1.0, 2.0, 3.0, 4.0],
'C' : [100, 200, 300, 400],
'D' : [2, 3, 4, 5]
})
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用pandas .isin函数,我可以做一些漂亮的事情
>>> print df_2.columns.isin(df_1.columns)
array([ True, True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
列B并C从df_2存在于df_1同时D不
我的问题是:有没有人知道如何返回df_2中存在但不存在于df_1中的列的列标签
这样的事情
array([u'D'], dtype=string)
Run Code Online (Sandbox Code Playgroud)
先感谢您!
请考虑以下示例
> data_text <- data.frame(text = c('where', 'are', 'you'),
blob = c('little', 'nice', 'text'))
> data_text
# A tibble: 3 x 2
text blob
<chr> <chr>
1 where little
2 are nice
3 you text
Run Code Online (Sandbox Code Playgroud)
我想打印包含正则表达式的行text(即第3行)
问题是,我有数百列,我不知道哪一列包含这个字符串.str_detect一次只能使用一列...
我怎么能用stringr包装呢?谢谢!
考虑这个简单的例子
library(dplyr)
dataframe <- data_frame(mytext1 = c('HELLO',
'WORLD'),
mytext2 = c('HELLO',
'AGAIN'),
value1 = c(1,2),
value2 = c(1,2))
# A tibble: 2 x 4
mytext1 mytext2 value1 value2
<chr> <chr> <dbl> <dbl>
1 HELLO HELLO 1 1
2 WORLD AGAIN 2 2
Run Code Online (Sandbox Code Playgroud)
我想将此数据框导出到乳胶表,但进行一些小的(但重要的)调整。
特别是,我想在乳胶输出中添加一个分隔文本变量的超级列和另一个分隔数字变量的超级列。mat也就是说,本图像中的某些内容com:
我尝试了 R 包xtable,tables但无法实现接近的目标(可能是因为它们创建了汇总统计表)。我在这里错过了什么吗?
谢谢!
考虑下面的例子
import pandas as pd
import numpy as np
myidx = pd.date_range('2016-01-01','2017-01-01')
data = pd.DataFrame({'value' : xrange(len(myidx))}, index = myidx)
data.head()
Out[16]:
value
2016-01-01 0
2016-01-02 1
2016-01-03 2
2016-01-04 3
2016-01-05 4
Run Code Online (Sandbox Code Playgroud)
我绝对需要提高直观上非常简单的性能:我需要“放大”数据帧,以便每个索引值“放大”几天(2 天前,2 天后)。
为了完成这项任务,我有以下功能
def expand_onerow(df, ndaysback = 2, nhdaysfwd = 2):
new_index = pd.date_range(pd.to_datetime(df.index[0]) - pd.Timedelta(days=ndaysback),
pd.to_datetime(df.index[0]) + pd.Timedelta(days=nhdaysfwd),
freq='D')
newdf = df.reindex(index=new_index, method='nearest') #New df with expanded index
return newdf
Run Code Online (Sandbox Code Playgroud)
现在,使用iterrows或(据说)更快的itertuples结果都会很差。
%timeit pd.concat([expand_onerow(data.loc[[x],:], ndaysback = 2, nhdaysfwd = 2) …Run Code Online (Sandbox Code Playgroud) 考虑这个简单的数据帧
> data_frame(var1 = c(NA, 1 , NA),
+ var2 = c (NA, 3, NA))
# A tibble: 3 x 2
var1 var2
<dbl> <dbl>
1 NA NA
2 1 3
3 NA NA
Run Code Online (Sandbox Code Playgroud)
我想填充数据框中所有列的所有缺失值.在我看来,它tidyr::fill()可以做到这一点,但我没有在没有一次指定列的情况下使其工作.
> data_frame(var1 = c(NA, 1 , NA),
+ var2 = c (NA, 3, NA)) %>% tidyr::fill(.direction = 'down')
# A tibble: 3 x 2
var1 var2
<dbl> <dbl>
1 NA NA
2 1 3
3 NA NA
Run Code Online (Sandbox Code Playgroud)
虽然输入列名称似乎有效
> data_frame(var1 = c(NA, 1 …Run Code Online (Sandbox Code Playgroud)