小编wen*_*wen的帖子

为什么apply()不适用于R中的数据帧?

我有一个名为"成人"的数据帧

> str(adult[, 1:2)
'data.frame':   32561 obs. of  15 variables:
 $ age      : int  39 50 38 53 28 37 49 52 31 42 ...
 $ worktp   : Factor w/ 9 levels " ?"," Federal-gov",..: 8 7 5 5 5 5 5 7 5 5 ...

> is.factor(adult[,1])
[1] FALSE

> is.factor(adult[,2])
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

一切顺利,直到我使用

> apply(adult[,1:2], 2, function(x) is.factor(x))
age worktp 
FALSE  FALSE 
Run Code Online (Sandbox Code Playgroud)

为什么我在worktp上得到FALSE,其中is.factor()只是给了我真的?我真的需要这个apply()函数来处理我的数据帧.我应该使用其他一些应用相关的功能吗?

谢谢!

r apply

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

在data.frame中检查列类时,apply()不起作用

我有一个数据帧.我想检查class每一列.

x1 = rep(1:4, times=5)
x2 = factor(rep(letters[1:4], times=5))
xdat = data.frame(x1, x2)

> class(xdat)
[1] "data.frame"
> class(xdat$x1)
[1] "integer"
> class(xdat$x2)
[1] "factor"
Run Code Online (Sandbox Code Playgroud)

但是,想象一下,我有很多列,因此需要apply()用来帮助我做到这一点.但它不起作用.

apply(xdat, 2, class)
         x1          x2 
"character" "character" 
Run Code Online (Sandbox Code Playgroud)

为什么我不能apply()用来查看每列的数据类型?或者我该怎么办?

谢谢!

r class apply

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

如何在R中键入+ - 符号

我需要使用包含Mean + - SD的标题.到目前为止,我只能得到这个:

"Mean +- SD or N (%)"
[1] "Mean +- SD or N (%)"
Run Code Online (Sandbox Code Playgroud)

我怎样才能直接使用"+ - "符号?你知道一个角色,而不是两个角色.

仅仅是为了将来,其他符号如希腊字母等等呢?

symbols r

4
推荐指数
1
解决办法
7547
查看次数

如何在 R 中使用曲线()对图形进行着色

我正在绘制标准正态分布。

curve(dnorm(x), from=-4, to=4, 
  main = "The Standard Normal Distibution", 
  ylab = "Probability Density",
  xlab = "X")
Run Code Online (Sandbox Code Playgroud)

出于教学原因,我想将低于我选择的某个分位数的区域涂上阴影。我怎样才能做到这一点?

plot r graph area ggplot2

4
推荐指数
1
解决办法
1780
查看次数

如何撤消strsplit以将多个字符合并为一个

假设我有一串字

txt = "The licenses for most software"
length(txt)
1
Run Code Online (Sandbox Code Playgroud)

我可以使用strsplit将其拆分为复合词

t = unlist(strsplit(txt, split=" "))
length(t)
5
Run Code Online (Sandbox Code Playgroud)

现在我想撤消我所做的事情。如何将5个单词重新连接到原始字符串中?

谢谢

r undo strsplit

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

如何用R处理OLS中的异方差性

我正在使用OLS方法拟合标准多元回归.我有5个预测变量(2个连续和3个分类)加上2个双向交互项.我使用残差与拟合图进行了回归诊断.异方差性非常明显,bptest()也证实了这一点.

我不知道接下来该做什么.首先,我的因变量是合理对称的(我不认为我需要尝试转换我的DV).我的连续预测因素也没有高度倾斜.我想在lm()中使用权重; 但是,我怎么知道要使用什么重量?

有没有办法自动生成权重以执行加权最小二乘?或者你还有其他方法吗?

r variance

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

如何按所有列对矩阵/ data.frame进行排序

我有一个矩阵,例如:

a = rep(0:1, each=4)
b = rep(rep(0:1, each=2), 2)
c = rep(0:1, times=4)
mat = cbind(c,b,a)
Run Code Online (Sandbox Code Playgroud)

我需要对这个矩阵的所有列进行排序.我知道如何通过排序特定列(即有限数量的列)来完成此操作.

mat[order(mat[,"c"],mat[,"b"],mat[,"a"]),]
     c b a
[1,] 0 0 0
[2,] 0 0 1
[3,] 0 1 0
[4,] 0 1 1
[5,] 1 0 0
[6,] 1 0 1
[7,] 1 1 0
[8,] 1 1 1
Run Code Online (Sandbox Code Playgroud)

但是,我需要一种通用的方法来执行此操作而不调用任何列名,因为我可以有任意数量的列.我如何按大量列排序?

sorting r matrix

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

如何在r中给出对角线和非对角线元素的矩阵?

我有一个矩阵的元素如下:

diag= rep(1,5)
offdiag = c(rep(1:4), rep(1:3), rep(1:2), 1)
Run Code Online (Sandbox Code Playgroud)

我想要的最终矩阵应该是一个对称矩阵,如下所示:

1 1 2 3 4
1 1 1 2 3 
2 1 1 1 2
3 2 1 1 1
4 3 2 1 1
Run Code Online (Sandbox Code Playgroud)

其中对角线由diag填充,而下三角区域由offdiag柱填充.

在实践中,所有数字都是随机的.所以我需要一种通用的方法来用元素填充矩阵.

提前致谢!

r matrix fill diagonal

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

如何将矢量转换为R中的列表?

我有一个长度为偶数的向量.

vec = c(1,3,2,4,5,6)
Run Code Online (Sandbox Code Playgroud)

我想将其转换为这样的列表,其中每2个连续的数字被放入子组件中.

[[1]]
[1] 1 3

[[2]]
[1] 2 4

[[3]]
[1] 5 6
Run Code Online (Sandbox Code Playgroud)

必须有一个简单的方法来做到这一点.如果更容易这样做,也可以从矩阵转换为这样的列表.

r list vector

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

如何用R中的"东西加特殊字符"替换许多特殊字符

我有这句话包含"&/?".

c = "Do Sam&Lilly like yes/no questions?"
Run Code Online (Sandbox Code Playgroud)

我想在每个特殊字符之前和之后添加一个空格

"Do Sam & Lilly like yes / no questions ? "
Run Code Online (Sandbox Code Playgroud)

我只能通过艰难的方式得到这个:

c = gsub("[&]", " & ", c)
c = gsub("[/]", " / ", c)
c = gsub("[?]", " ? ", c)
Run Code Online (Sandbox Code Playgroud)

但想象一下,我有许多这些特殊的角色,保证使用[:alnum:].所以我真的在寻找一个看起来像这样的解决方案:

gsub("[[:alnum:]]", " [[:alnum:]] ", c)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能以这种方式使用[:alnum:]作为第二个参数.

regex string replace r

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

如果R中有0,如何填写"后续"数字?

我有一串数字:

n1 = c(1, 1, 0, 6, 0, 0, 10, 10, 11, 12, 0, 0, 19, 23, 0, 0)
Run Code Online (Sandbox Code Playgroud)

我需要将0与相应的数字替换为"后面"以获得,同时将0留在尾部(因为它们背后没有任何东西):

n2 = c(1, 1, 6, 6, 10, 10, 10, 10, 11, 12, 19, 19, 19, 23, 0, 0)
Run Code Online (Sandbox Code Playgroud)

我如何从n1到n2?

这似乎比我之前提到的问题要难得多:

如果R中有0,如何填写前面的数字?

flodel提出了一个优雅的解决方案:

n2 <- n1[cummax(seq_along(n1) * (n1 != 0))]
Run Code Online (Sandbox Code Playgroud)

但是,这个解决方案在这里不起作用; 我已经尝试但未能调整代码.

别人能想出一个优雅的解决方案吗?

提前致谢!

replace numbers r sequence

0
推荐指数
1
解决办法
109
查看次数

标签 统计

r ×11

apply ×2

matrix ×2

replace ×2

area ×1

class ×1

diagonal ×1

fill ×1

ggplot2 ×1

graph ×1

list ×1

numbers ×1

plot ×1

regex ×1

sequence ×1

sorting ×1

string ×1

strsplit ×1

symbols ×1

undo ×1

variance ×1

vector ×1