小编Kon*_*rad的帖子

R:获取交叉表(gmodels)的非繁重的方法的结果很好地格式化(HTML)到降价文件

下面的代码

---
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)

生成这个令人愉快的表: 表示例 -  kable和表

我更喜欢包中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)

markdown r crosstab knitr r-markdown

3
推荐指数
1
解决办法
2783
查看次数

通过传递带有列名的有序向量来动态排序dplyr中的列以进行选择

我正在使用下面的代码生成一个简单的汇总表:

# 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)

sorting r dataframe dplyr

3
推荐指数
2
解决办法
1243
查看次数

使用 dplyr 将列名作为参数传递给函数

我有一个如下所示的数据框:

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) 中的错误:参数的“类型”(字符)无效。如何在汇总函数中将列名作为参数传递而没有引号?

r dataframe dplyr quosure

3
推荐指数
1
解决办法
2903
查看次数

R,从所有列中的 data.frame 中删除带有空字符串的行

我想从数据框中删除所有行,其中任何可用列的字符串长度为零。我尝试使用完整的案例功能,但它不起作用,大概是一些字符串有空白空格。因此,我想搜索 data.frame 的所有列并删除在可用列之一中具有空字符串的所有行。我的数据框被定义为ladata

# Remove incomplete cases
ladta <- ladta[complete.cases(ladta),]
Run Code Online (Sandbox Code Playgroud)

string r dataframe

2
推荐指数
1
解决办法
8212
查看次数

R使用日期列聚合data.frame

我有数据框重新下面的数据框

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)

我想将日期格式化为日期.

aggregate r object as.date

2
推荐指数
2
解决办法
2万
查看次数

删除具有缺失值的数据框列中的字符串后的所有内容

我有一个类似于以下摘录的数据框:

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,gsubsub为这里讨论,但不能强迫那些赞扬的工作.我必须说明以下事实:

  1. 列缺少值,我想将它们保留在原来的位置
  2. 字符串"_"位于变量的不同位置
  3. 我还希望保留数据框的其余部分

regex string r gsub strsplit

2
推荐指数
1
解决办法
4576
查看次数

使用语法困难的字符串作为数据框中的列名

我正在使用类似于以下摘录的数据框:

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 以更有效的方式使用那些凌乱的字符串?根据经验,我想:

  1. 保留数字(因为它们对应于时间)
  2. 从文本中至少保留几个开头的单词
  3. 确保名称是唯一的
  4. 整个解决方案必须相当通用,因为第一行中有很多垃圾(通常是空格或特殊字符)。

string syntax r names dataframe

2
推荐指数
1
解决办法
313
查看次数

如何将分割更改为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).有什么方法可以将它改为水平分割而不是垂直分割?

split r vector

2
推荐指数
1
解决办法
66
查看次数

向量化分配函数并在全局环境中创建对象

我想对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

namespaces r vectorization assign

2
推荐指数
1
解决办法
66
查看次数

无法使用 c++11 编译简单的 Rcpp 函数

问题背景

升级到后,我似乎无法编译一个使用// [[Rcpp::plugins(cpp11)]]. 我试过了:

  • Makevars根据这个答案进行编辑
  • 升级后运行xcode-select --install以下有关在下编译 C 的链接讨论
  • 更改 include, 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)

c++ r rcpp c++11 macos-mojave

2
推荐指数
1
解决办法
721
查看次数