繁体   English   中英

将R中的特定行添加到新表

[英]get a particular row in R to a new table

我是R的新手,所以请指导我。

下面显示的是一个简单的表,称为Order

   Col1   Col2    Col3

  hey    hi   july 12,2013
  hey    hi   june 12,2013
  hey    hi   April 12,2013
  hey    hi   April 14,2012

如果我想写一个查询,这样我得到一个新表即结果。 我需要使用正则表达式来匹配Col3的一部分字符串,然后计数。

 july     june   April
  1         1      2

如果有人知道该怎么做,请帮助我。

您可以使用sub来提取月份的名称和table来计算频率:

dat <- read.table(text = "Col1   Col2    Col3
hey    hi   'july 12,2013'
hey    hi   'june 12,2013'
hey    hi   'April 12,2013'
hey    hi   'April 14,2012'", header = TRUE)

table(sub("^(\\w+) .*", "\\1", dat$Col3))

# April  july  june 
#     2     1     1 

sub("^(\\\\w+) .*", "\\\\1", dat$Col3)工作?

function sub执行字符串替换。 引号内的字符串是正则表达式。 ^是字符串的开头, \\\\w是单词字符, +表示一个或多个。 是一个文字空间。 .*表示任意数量的任何字符。 括号用于创建组。 第一个(也是唯一一个)组(\\\\w+)与字符串开头的单词字符匹配。 sub的第二个参数"\\\\1"用于将整个字符串替换为代表第一组的子字符串。 简而言之:整个字符串被第一个单词替换。

数据:

data <- read.table(text = "Col1   Col2    Col3
hey    hi   'july 12,2013'
hey    hi   'june 12,2013'
hey    hi   'April 12,2013'
hey    hi   'April 14,2012'", header = TRUE)

使用日期的答案:

    #tranform data in POSIXlt    
    data$Col3 <- as.POSIXlt(data$Col3, format="%B %d, %Y")

    ## group using table with POSIXlt numbers (0 is january)
    table(data$Col3$mon)
    3 5 6 
    2 1 1 

    ## group using table with normal month numbers
    table(month(data$Col3))
    4 6 7 
    2 1 1

    ## group using aggregate with POSIXlt numbers (0 is january) 
    aggregate(data$Col1, by=list(data[,"Col3"]$mon), length)

    #result
    Group.1 x
    1       3 2
    2       5 1
    3       6 1

    ## group using aggregate with normal month numbers 
    aggregate(data$Col1, by=list(month(data$Col3)), length)

    #result
  Group.1 x
1       4 2
2       6 1
3       7 1

PS:如果您在一月份的POSIXlt中获得data $ Col3 $ mon为0,那么4月为3,而不是您期望的4。 要获得“正常”月份数,您应该使用month(data $ Col3)-刚意识到要阅读Ananda的注释。

如果您想要一个更漂亮的版本(由Ananda Mahto撰写):

    Col3 <- as.POSIXlt(data$Col3, format="%B %d, %Y"); table(month.name[month(Col3)])

    April  July  June 
      2     1     1 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM