相关疑难解决方法(0)

如何从data.frame中提取单个列作为data.frame?

说我有一个data.frame:

df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
  A  B  C
1 10 11 111
2 20 22 222
3 30 33 333
Run Code Online (Sandbox Code Playgroud)

如果我选择两个(或更多)列,我会得到一个data.frame:

x <- df[,1:2]
   A  B
 1 10 11
 2 20 22
 3 30 33
Run Code Online (Sandbox Code Playgroud)

这就是我要的.但是,如果我只选择一列,我会得到一个数字向量:

x <- df[,1]
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用as.data.frame(),它不会更改两列或更多列的结果.它确实在一列的情况下返回data.frame,但不保留列名:

x <- as.data.frame(df[,1])
     df[, 1]
1       1
2       2
3       3
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它会像这样.在我看来,如果我提取一个或两个或十个列,它应该没有区别.IT应始终返回向量(或矩阵)或始终返回data.frame(具有正确的名称).我错过了什么?谢谢!

注意:这不是关于矩阵的问题的重复,因为矩阵和data.frame在R中是根本不同的数据类型,并且可以与dplyr不同地工作.有几个答案适用于data.frame但不适用于矩阵.

r subset dataframe

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

R:使用空方括号轻松分配?X [] < -

在查看最近在SO上发布的答案时,我注意到了一个不熟悉的任务说明.而不是通常的形式 myVar<- myValue,它使用了myVar[]<- myValue.就个人而言,我从未见过这样的作业,但它有一个非常有用的效果 - 它将指定的数据myValue重新塑造为myVar的形状.

我想在我的代码中使用它.然而,文档"<-"似乎是沉默的.

这是一个完善的功能,可以依靠它在所有情况下工作吗?

另外,我的猜测是它可能是函数调用堆栈的副作用,即调用<-[按顺序,但我无法弄清楚如何.有人可以对此有所了解吗?

这是一个例子 -

# A dataframe
df1<- data.frame(a=1:4, b=11:14)

# simple assignment assigns to class of RHS
df1<- c(21:24,31:34)
df1 
#[1] 21 22 23 24 31 32 33 34
class(df1)
#[1] "integer"

#assignment with [] casts to class of LHS 
df1<- data.frame(a=1:4, b=11:14)
df1[]<- c(21:24,31:34)
df1

#    a  b
# 1 21 31
# 2 22 32
# 3 23 33
# 4 …
Run Code Online (Sandbox Code Playgroud)

syntax casting r variable-assignment reshape

13
推荐指数
1
解决办法
649
查看次数

标签 统计

r ×2

casting ×1

dataframe ×1

reshape ×1

subset ×1

syntax ×1

variable-assignment ×1