小编Fra*_*ank的帖子

具有NA,TRUE和FALSE的逻辑运算符(AND,OR)

我无法理解逻辑(布尔)值的属性TRUE,FALSE以及NA与逻辑OR(|)和逻辑AND(&)一起使用时.这里有些例子:

NA | TRUE
# [1] TRUE

NA | FALSE
# [1] NA

NA & TRUE
# [1] NA

NA & FALSE
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

你能解释一下这些输出吗?

r logical-operators

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

如何使用Dplyr的Summarize和which()来查找最小/最大值

我有以下数据:

Name <- c("Sam", "Sarah", "Jim", "Fred", "James", "Sally", "Andrew", "John", "Mairin", "Kate", "Sasha", "Ray", "Ed")
Age <- c(22,12,31,35,58,82,17,34,12,24,44,67,43)
Group <- c("A", "B", "B", "B", "B", "C", "C", "D", "D", "D", "D", "D", "D") 
data <- data.frame(Name, Age, Group)
Run Code Online (Sandbox Code Playgroud)

我想用dplyr来

(1)按"组"分组数据(2)显示每组内的最小和最大年龄(3)显示最小和最大年龄的人的姓名

以下代码执行此操作:

data %>% group_by(Group) %>%
     summarize(minAge = min(Age), minAgeName = Name[which(Age == min(Age))], 
               maxAge = max(Age), maxAgeName = Name[which(Age == max(Age))])
Run Code Online (Sandbox Code Playgroud)

哪个效果很好:

  Group minAge minAgeName maxAge maxAgeName
1     A     22        Sam     22        Sam
2     B     12      Sarah     58      James …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

在dplyr中选择一滴不起作用

在dplyr中,我想排除包含单词"junk"的列,但是,可能没有任何列包含单词"junk".在这种情况下,dplyr应该返回所有列.但它没有返回.请参阅下面的单元测试用例

df<-data.frame(name=paste("name",1:5), age=1:5)
str(df)
# 'data.frame': 5 obs. of  2 variables:
# $ name: Factor w/ 5 levels "name 1","name 2",..: 1 2 3 4 5
# $ age : int  1 2 3 4 5
df1<-df%>%select(-contains("junk"))
str(df1)
# 'data.frame': 5 obs. of  0 variables
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

select r dplyr

18
推荐指数
3
解决办法
6765
查看次数

使用!= <some non-NA>对data.table进行子集化也排除了NA

我有一个data.table,列有一个NAs.我想删除该列占用特定值的行(恰好是这样"").但是,我的第一次尝试也导致我丢失了NAs 行:

> a = c(1,"",NA)
> x <- data.table(a);x
    a
1:  1
2:   
3: NA
> y <- x[a!=""];y
   a
1: 1
Run Code Online (Sandbox Code Playgroud)

看了之后?`!=`,我找到了一个有效的衬垫,但这很痛苦:

> z <- x[!sapply(a,function(x)identical(x,""))]; z
    a
1:  1
2: NA
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点?此外,我认为没有好的方法来扩展它以排除多个非NA值.这是一个糟糕的方式:

>     drop_these <- function(these,where){
+         argh <- !sapply(where,
+             function(x)unlist(lapply(as.list(these),function(this)identical(x,this)))
+         )
+         if (is.matrix(argh)){argh <- apply(argh,2,all)}
+         return(argh)
+     }
>     x[drop_these("",a)]
    a
1:  1
2: NA
>     x[drop_these(c(1,""),a)]
    a
1: NA
Run Code Online (Sandbox Code Playgroud)

我查看?J …

r data.table

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

向表中添加列总和

数据结构是:

Company        Marital
a              single
a              married
b              widow
c              married
b              single
Run Code Online (Sandbox Code Playgroud)

我正在使用table(df$Company,df$Marital),但我希望有一个显示行总数的列,如下所示:

            a     b    c    Total
married     50    20   5    75
single      10    10   10   30
widow       5     50   0    55
Run Code Online (Sandbox Code Playgroud)

是否有不同的表函数提供行和附加选项?

r

16
推荐指数
4
解决办法
3万
查看次数

如何防止regmatches下降不匹配?

我想捕获第一场比赛,NA如果没有比赛则返回.

regexpr("a+", c("abc", "def", "cba a", "aa"), perl=TRUE)
# [1]  1 -1  3  1
# attr(,"match.length")
# [1]  1 -1  1  2

x <- c("abc", "def", "cba a", "aa")
m <- regexpr("a+", x, perl=TRUE)
regmatches(x, m)
# [1]  "a"  "a"  "aa"
Run Code Online (Sandbox Code Playgroud)

所以我期待"a",NA,"a","aa"

regex r

15
推荐指数
3
解决办法
1747
查看次数

将数据帧列表转换为R中的各个数据帧

我一直在寻找我认为简单解决方案的高低.

我有一个大的数据框架,我按因素分开.

eqRegions <- split(eqDataAll, eqDataAll$SeismicRegion)

现在,这将按区域创建数据框的列表对象; 共有8个.我想循环遍历列表,使用另一个名称制作单独的数据框.

我可以执行以下操作将列表项转换为单独的数据帧,但我认为如果我有很多因素,有一个循环机制很快.

testRegion1 <- eqRegions[[1]]

testRegion3 <- eqRegions[[3]]

我可以手动执行上面的操作并且很好地处理它,但是如果我有很多区域则效率不高.我想做的是相当于以下内容:

for (i in 1:length(eqRegions)) {
   region[i] <- as.data.frame(eqRegions[[i]])
}
Run Code Online (Sandbox Code Playgroud)

我认为关键是在循环之前定义区域,但它会自行覆盖而不是递增.非常感谢.

for-loop r list dataframe

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

强制rstudio使用浏览器而不是查看器

考虑(如果rstudio)将在浏览器中打开某些内容的功能,如果y = TRUE在浏览器中和浏览器中y = FALSE.您可以强制whatever在浏览器中打开options(viewer = NULL)(然后需要重置为之前),但我无法使用常规on.exit方法在函数内部使用它.在Windows和osx上测试.

f <- function(x, y = TRUE) {
  if (y) {
    oo <- getOption('viewer')
    on.exit(options(viewer = oo))
    options(viewer = NULL)
  } else options(viewer = NULL)
  print(getOption('viewer'))
  DT::datatable(x)
}

g <- function(x, y = TRUE) {
  if (y) {
    oo <- getOption('viewer')
    on.exit(options(viewer = oo))
    options(viewer = NULL)
  } else options(viewer = NULL)
  print(getOption('viewer'))
  htmlTable::htmlTable(x)
}

## in rstudio, returns the viewer function
getOption('viewer')
# …
Run Code Online (Sandbox Code Playgroud)

r rstudio

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

从R中的data.table列计算中位数

我试图计算多个列的中值,但我的数据有点时髦.它看起来像下面的例子.

library(data.table)

dt <- data.table("ID" = c(1,2,3,4),"none" = c(0,5,5,3), 
                 "ten" = c(3,2,5,4),"twenty" = c(0,2,3,1))


   ID none ten twenty
1:  1    0   3      0
2:  2    5   2      2
3:  3    5   5      3
4:  4    3   4      1
Run Code Online (Sandbox Code Playgroud)

在表中,列表示该值的出现次数.我想计算中位数.

例如,对于ID = 1

median(c(10, 10, 10))
Run Code Online (Sandbox Code Playgroud)

是我想要创建的计算.

对于ID = 2

median(c(0, 0, 0, 0, 0, 10, 10, 20, 20))
Run Code Online (Sandbox Code Playgroud)

我尝试过使用rep()lapply()取得了非常有限的成功,并且已经就如何实现这一目标提供了明确的指导.我理解为喜欢rep()我将不得不硬编码我的价值重复(例如rep(0,2)rep(10,2)),这是我所期望的.我正在努力创建一个包含每列重复的列表或向量.

r lapply rep data.table

14
推荐指数
3
解决办法
8913
查看次数

将图保存在data.table列列中

当我跑...

library(data.table)
DT = CJ(id = 1, id2 = 1:3)[, .(
    d = as.IDate("2017-01-01")+1:10, v = id*10 + id2*1:10
), by=.(id, id2)]

plotDT = DT[, {
    par(mfrow = c(uniqueN(id2), 1), mar = c(2,2,.5,2))
    .SD[,{ 
        plot(d, v, type="l")
    }, by=id2]
    .(p = .(recordPlot()))
}, by=id]

x11()
plotDT[id == 1L, replayPlot(p[[1]])]
Run Code Online (Sandbox Code Playgroud)

情节DT[...]是正确的:

虽然重播是错误的:

在recordedplot中,最终的值xy神奇地应用于所有三个图,可能是因为data.table处理指向by=组中定义的列的指针.

我不确定我是否理解发生了什么,因为我可以在表面上改变这个例子,写作v = id2*1:10而不是v = id*10 + id2*1:10- 噗 - 问题消失了.

我想知道(i)为什么会发生这种情况,以及(ii)我可以通过什么简单的调整来解决这个问题?

plot r graph data.table

14
推荐指数
1
解决办法
475
查看次数

标签 统计

r ×10

data.table ×3

dplyr ×2

dataframe ×1

for-loop ×1

graph ×1

lapply ×1

list ×1

logical-operators ×1

plot ×1

regex ×1

rep ×1

rstudio ×1

select ×1