下面的代码
---
title: "Example"
output: html_document
---
```{r}
require(datasets)
data(esoph)
require(knitr, quietly = TRUE, warn.conflicts = FALSE)
kable(table(esoph$agegp, esoph$alcgp),
caption = "Some sample")
```
Run Code Online (Sandbox Code Playgroud)
生成这个令人愉快的表:

我更喜欢包中CrossTable函数生成的结果gmodels,我可以很灵活地引入有趣的摘要:
> CrossTable(esoph$agegp, esoph$alcgp, digits = 1, prop.r = FALSE, prop.t = FALSE, chisq = FALSE,
+ prop.chisq = FALSE)
Cell Contents
|-------------------------|
| N |
| N / Col Total |
|-------------------------|
========================================================
esoph$alcgp
esoph$agegp 0-39g/day 40-79 80-119 120+ Total
--------------------------------------------------------
25-34 4 4 3 4 15
0.2 0.2 0.1 …Run Code Online (Sandbox Code Playgroud) 我正在使用下面的代码生成一个简单的汇总表:
# Data
data("mtcars")
# Lib
require(dplyr)
# Summary
mt_sum <- mtcars %>%
group_by(am) %>%
summarise_each(funs(min, mean, median, max), mpg, cyl) %>%
mutate(am = as.character(am)) %>%
left_join(y = as.data.frame(table(mtcars$am),
stringsAsFactors = FALSE),
by = c("am" = "Var1"))
Run Code Online (Sandbox Code Playgroud)
代码产生了预期的结果:
> head(mt_sum)
Source: local data frame [2 x 10]
am mpg_min cyl_min mpg_mean cyl_mean mpg_median cyl_median mpg_max cyl_max Freq
(chr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (int)
1 0 10.4 4 17.14737 6.947368 17.3 8 24.4 8 19
2 1 …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据框:
transid<-c(1,2,3,4,5,6,7,8)
accountid<-c(a,a,b,a,b,b,a,b)
month<-c(1,1,1,2,2,3,3,3)
amount<-c(10,20,30,40,50,60,70,80)
transactions<-data.frame(transid,accountid,month,amount)
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 dplyr 包动词为每个 accountid 编写每月总金额的函数。
my_sum<-function(df,col1,col2,col3){
df %>% group_by_(col1,col2) %>%summarise_(total_sum = sum(col3))
}
my_sum(transactions, "accountid","month","amount")
Run Code Online (Sandbox Code Playgroud)
得到如下结果:
accountid month total_sum
a 1 30
a 2 40
a 3 70
b 1 30
b 2 50
b 3 140
Run Code Online (Sandbox Code Playgroud)
我收到如下错误:- sum(col3) 中的错误:参数的“类型”(字符)无效。如何在汇总函数中将列名作为参数传递而没有引号?
我想从数据框中删除所有行,其中任何可用列的字符串长度为零。我尝试使用完整的案例功能,但它不起作用,大概是一些字符串有空白空格。因此,我想搜索 data.frame 的所有列并删除在可用列之一中具有空字符串的所有行。我的数据框被定义为ladata。
# Remove incomplete cases
ladta <- ladta[complete.cases(ladta),]
Run Code Online (Sandbox Code Playgroud) 我有数据框重新下面的数据框
Date Expenditure Indicator
29-01-2011 5455 212
25-01-2012 5452 111
11-02-2011 365 5
Run Code Online (Sandbox Code Playgroud)
我目前有兴趣总结支出值,我正在尝试使用下面的功能
dta.sum <- aggregate(x = dta, FUN = sum,
by = list(Group.date = dta$date))
Run Code Online (Sandbox Code Playgroud)
但R返回以下错误,Summary.Date中的错误(c(15614L,15614L,15614L,15614L,15614L,15614L,:未为"日期"对象定义的总和.日期列以前使用as定义为日期.日期功能.类似的功能,但平均工作正常.
dta.sum <- aggregate(x = dta, FUN = mean
by = list(Group.date = dta$date))
Run Code Online (Sandbox Code Playgroud)
我想将日期格式化为日期.
我有一个类似于以下摘录的数据框:
Observation Identifier Value
Obs001 ABC_2001 54
Obs002 ABC_2002 -2
Obs003 1
Obs004 1
Obs005 Def_2001/05
Run Code Online (Sandbox Code Playgroud)
我想将此数据帧转换为数据框,其中"_"符号后面的部分字符串将被删除:如下图所示:
Observation Identifier_NoTime Value
Obs001 ABC 54
Obs002 ABC -2
Obs003 1
Obs004 1
Obs005 Def
Run Code Online (Sandbox Code Playgroud)
我试图用试验strsplit,gsub并sub为这里讨论,但不能强迫那些赞扬的工作.我必须说明以下事实:
我正在使用类似于以下摘录的数据框:
df <- data.frame(A=c("Some messy string to be used",222,0),
B=c("Very important ? indicator from 2001", 888, 44),
C=c("001 This variable / makes no sense", 888, 44),
D=c("Geography", 1, 2))
Run Code Online (Sandbox Code Playgroud)
我想使用第一行中的值作为列名,我使用下面的代码:
names(df) <- make.names(df[1,])
Run Code Online (Sandbox Code Playgroud)
不幸的是,语法以Xn格式生成名称,如下图所示:
> names(df)
[1] "X3" "X3" "X1" "X3"
Run Code Online (Sandbox Code Playgroud)
我知道使用的字符串很混乱,make.names无法进行有意义的转换。如何强制 R 以更有效的方式使用那些凌乱的字符串?根据经验,我想:
我有矢量
x <- c("A", "B", "C", "D", "E", "F")
Run Code Online (Sandbox Code Playgroud)
我按以下方式分裂:
split(x, 1:2)
Run Code Online (Sandbox Code Playgroud)
它出现为(a,c,e)和(b,d,f),但我想要(a,b,c)和(d,e,f).有什么方法可以将它改为水平分割而不是垂直分割?
我想对assign函数进行向量化,并创建一组参数,以反映所提供的命名向量,该向量可以直接在中使用.GlobalEnv。
vec_args <- c(arg1 = 1,
arg2 = 2,
arg3 = 3)
Vectorize(assign)(x = names(vec_args),
value = vec_args,
envir = globalenv())
Run Code Online (Sandbox Code Playgroud)
点[[3L]] [[1L]]中的错误:用于设置环境的错误参数
ag1 <- 1; arg2 <- 2; arg3 <- 3; ls()
# [1] "ag1" "arg2" "arg3" "vec_args"
Run Code Online (Sandbox Code Playgroud)
或通过assign:
实际上,我想复制该调用:
assign(x = "arg1", value = vec_args[1], envir = globalenv())
Run Code Online (Sandbox Code Playgroud)
向量的每个元素,并使用向量名称在中创建名称.GlobalEnv。
升级到macos-mojave后,我似乎无法编译一个使用// [[Rcpp::plugins(cpp11)]]. 我试过了:
Makevars根据这个答案进行编辑xcode-select --install以下有关在macos下编译 C 的链接讨论。string/string.h会导致相同的错误我起草的函数是为了生成错误:
#include <Rcpp.h>
#include <string.h> // std::string, std::stod
using namespace Rcpp;
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
NumericVector convertToDouble(Rcpp::StringVector x) {
// Numeirc vector to store results
NumericVector res;
// Double for converted values
double converted_double;
for(Rcpp::StringVector::iterator it = x.begin(); it != x.end(); ++it) {
// Get [] for vector element
int index …Run Code Online (Sandbox Code Playgroud)