小编Sot*_*tos的帖子

R - 绘图错误对象...未找到

我尝试运行带虹膜数据集的样本行,给出对象'...'未找到错误.有什么我需要在我的环境中检查具体的吗?

library(plotly)
p <- plot_ly(iris, x = Petal.Length, y = Petal.Width,color = Species, mode = "markers")
Run Code Online (Sandbox Code Playgroud)

plot_ly中的错误(iris,x = Petal.Length,y = Petal.Width,color = Species,:object'Petal.Length'未找到

r plotly

6
推荐指数
1
解决办法
8129
查看次数

按组滚动方式

我正在尝试对分组 ( dplyr::group_by) 的数据进行滚动意味着 - 我无法理解为什么这不起作用的原因:

set.seed(1)
library(dplyr)
library(zoo)
df <- data.frame(a=sample(LETTERS[1:2], replace= T, 10),
                 b=rnorm(20), stringsAsFactors = F)
df %>% 
  group_by(a) %>% 
  mutate(rollapply(b, 3, mean))
Run Code Online (Sandbox Code Playgroud)

我可以看到这里可以找到一个冗长的解决方案,但想知道为什么上面的方法不起作用

r mean zoo dplyr

5
推荐指数
1
解决办法
1899
查看次数

将两个相同大小的数据框依次合并为一列

我有两个大小相同的数据集 [132,450000]。一个具有值,另一个具有对应于这些值的 p 值。现在我想合并这两个数据集,以便我有 1 个大数据框 [264,450000],其中包含带有值的列,后跟带有相应 p 值的列。行名完全相同,列名类似于:df1 中的 sample1 和 df2 中的 sample1_pval

例如我有两个像这样的数据框

> df1
    x y
cg1 1 a
cg2 2 b
cg3 3 c
cg4 4 d
cg5 5 e

> df2
     x_pval y_pval 
cg1   6      f
cg2   7      g
cg3   8      h
cg4   9      i
cg5  10      j
Run Code Online (Sandbox Code Playgroud)

我想用这个顺序合并它们:df1 的第一列,然后是 df2 的第一列,然后是 df1 的第二列,然后是 df2 的第二列等等......

那么它看起来像这样:

> df
           x       x_pval    y        y_pval
cg1        1        6        a        f
cg2        2        7        b        g
cg3 …
Run Code Online (Sandbox Code Playgroud)

r dataframe cbind

5
推荐指数
1
解决办法
1029
查看次数

按句子分割文本,但不按特殊模式分割文本

这是我的示例文本:

text = "First sentence. This is a second sentence. I like pets e.g. cats or birds."
Run Code Online (Sandbox Code Playgroud)

我有一个按句子分割文本的功能

library(stringi)
split_by_sentence <- function (text) {

  # split based on periods, exclams or question marks
  result <- unlist(strsplit(text, "\\.\\s|\\?|!") )

  result <- stri_trim_both(result)
  result <- result [nchar (result) > 0]

  if (length (result) == 0)
    result <- ""

  return (result)
}
Run Code Online (Sandbox Code Playgroud)

它实际上是按标点符号分隔的。这是输出:

> split_by_sentence(text)
[1] "First sentence"            "This is a second sentence" "I like pets e.g"           "cats or birds." 
Run Code Online (Sandbox Code Playgroud)

是否有可能排除“eg”等特殊模式?

regex split r

5
推荐指数
1
解决办法
977
查看次数

如何提取列表中的第一项(即使列表为空)

在 R 中,我想从嵌套列表中提取第一项;但有时该列表可能为空。

例如:

myList <- list(
            list(ID = 1, Sales = 1000, Product = "Car"),
            list(ID = 2, Sales = 2000, Product = "Boat"),
            list(ID = 3, Sales = 1500, Product = "Bike")
)
myList2 <- list()
Run Code Online (Sandbox Code Playgroud)

所以当我拨打以下电话时:

myList[[1]]
myList2[[1]]
Run Code Online (Sandbox Code Playgroud)

第一个调用返回一个有效的子列表(ID=1, Sales=1000, Product = "Car"),但第二个调用返回一个错误 -

Error in myList2[[1]] : subscript out of bounds

是否有一个简单的调用可以表示“填充列表时返回项目 1,否则返回NULL并且不抛出错误”?

r

5
推荐指数
1
解决办法
1844
查看次数

从矩阵中删除一列

我对 R 有点陌生,想通过该列的名称从矩阵中删除一列。我知道这X[,2]给出了第二列,并X[,-2] 给出了除第二列之外的每一列。我真正想知道的是是否有使用列名的类似命令。我有一个矩阵并想删除“销售”列,但X[,-"sales"]似乎不适用于此。我该怎么做?我只会使用列号,我希望以后能够将它用于其他具有不同维度的矩阵。任何帮助将非常感激。

r matrix

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

如何使用dplyr获得多个变量的pmax?

在有人将此问题标记为重复之前,我已经看到过这个问题了,它不能解决我的问题。如果我尝试

mtcars %>% mutate(new = rowMeans(select(.,c(1,7)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

它很好地工作,但是如果我用pmax而不是这样做rowMeans

mtcars %>% mutate(new = pmax(select(.,c(1,7)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

我懂了

Error: Column `new` is of unsupported class data.frame
Run Code Online (Sandbox Code Playgroud)

为什么?在这个例子中,我可以得到输出

mtcars %>% mutate(new = pmax(mpg,qsec,carb,na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

但是我尝试使用它,select因为我需要一些真实的数据select helper或由列位置确定的变量(例如1,7在示例中),否则我也会出错。

如链接问题的答案中所建议,我也尝试使用do.call获取错误。

谢谢!

r dplyr

5
推荐指数
1
解决办法
92
查看次数

尝试使用聚合对列中的值子集运行线性模型

我大约有7500个沉降值。每个沉降值(V9)对应一个测站(V2)和一个年份(V3)。我想为每个站设置一条最合适的线(V9〜V3)。

我使用lm创建了一个函数,该函数在手动子集数据时可以正常工作。但是,当我尝试使用聚合在每个工作站上运行线性模型时,每个工作站都会获得相同的值。

这是一些数据的示例:

V2        V3    V9
CRMS0002  2008  -28.4990000
CRMS0002  2009  -28.8080808
CRMS0002  2012  -31.9871795
CRMS0006  2008  -56.8998413
CRMS0006  2013   40.8611111
CRMS0006  2015   32.8555555
CRMS0033  2007  -16.8044444
Run Code Online (Sandbox Code Playgroud)

这是代码:

sub_rate = function(x) {lm(CRMSsub$V9~CRMSsub$V3)}
agg <- aggregate(CRMSsub$V9, by = list(CRMSsub$V2), FUN = sub_rate)
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

agg <- lapply(split(CRMSsub, CRMSsub$V3), FUN = sub_rate)
Run Code Online (Sandbox Code Playgroud)

根据第一和第二代码的一部分进行汇总。因此,我得到了354个按工位组织的元素,但是每个工位的线性模型结果(分别给出截距和斜率)相同,这意味着它无法按工位执行功能。这是结果的示例:

Group.1         x
CRMS0002        c(`(Intercept)` = -2333.06378840009, `CRMSsub$V3` = 1.1541441797906)
CRMS0006        c(`(Intercept)` = -2333.06378840009, `CRMSsub$V3` = 1.1541441797906)
CRMS0033        c(`(Intercept)` = -2333.06378840009, `CRMSsub$V3` = 1.1541441797906)
Run Code Online (Sandbox Code Playgroud)

aggregate r function subset

5
推荐指数
1
解决办法
39
查看次数

在数据框UP的单列中移动值,并在另一列中指定滞后

我想将来自不同国家/地区的价格调整到一个时区,这意味着将一列向上移动在另一列中声明的滞后时间(移动是时差)。

使用这样的示例数据:

example=data.frame(country=c("IT","IT","GR","GR","GR","TR","TR","TR","TR"), 
                   price=c(200,150,300,480,590,638,237,438,555), 
                   shift=c(0,0,1,1,1,2,2,2,2))
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

        country   price   shift
        IT        200     0
        IT        150     0
        GR        300     1
        GR        480     1
        GR        590     1
        TR        638     2
        TR        237     2
        TR        438     2
        TR        555     2
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果:

        country   price   shift
        IT        200     0
        IT        150     0
        GR        480     1
        GR        590     1
        GR        NA      1
        TR        438     2
        TR        555     2
        TR        NA      2
        TR        NA      2
Run Code Online (Sandbox Code Playgroud)

我试图从此线程使用一种解决方案: R:在数据帧UP的单列中移动值, 但由于它使用一个滞后值,因此并不完全适用。

r dataframe

5
推荐指数
1
解决办法
45
查看次数

用“间隙公差”分组顺序值

我有这个df

FRAME   TRACK_ID   SUM   TC_17
1       15         0     1
2       15         0     1
3       15         0     1
4       15         0     -1
5       15         0     1
6       15         0     1
7       15         0     -1
8       15         0     -1
9       15         0     1
10      15         0     1
Run Code Online (Sandbox Code Playgroud)

现在,我正在使用此代码来获取TC_17具有值的帧1

for (i in 1:length(IDs)) {
  temp <- get(paste("TRACK_", IDs[i], sep = ""))
  temp3 <- paste("TRACK_", IDs[i], sep = "")
  if (ncol(temp)==3) {
    print(paste("No contacts detected for Track", IDs[i]))
    next
  } …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
68
查看次数

标签 统计

r ×10

dataframe ×2

dplyr ×2

aggregate ×1

cbind ×1

function ×1

matrix ×1

mean ×1

plotly ×1

regex ×1

split ×1

subset ×1

zoo ×1