假设我有一个数据框df,例如:
col1 col2
x1 y1
x2 y2
每个“单元格”中包含任意值。 如何获得给定单元格的单个值?
例如,要获取第一行和第二列中单元格的值,请执行以下操作:
df[1,2]
使用数值,但是使用字符串也会返回级别。
获取单个值的正确方法是什么(例如,在另一个数据帧的子集的条件中使用)?
修改 关于我需要什么的更多细节。假设我需要使用df中的值来配置另一个数据帧df2:
subset(df2, (id == SomeCommand(df[1,1])) & (name == SomeCommand(df[1,2])))
是否有任何这样的“SomeCommand”能够可靠地返回相应类型的单个值(w / o级别),而不管df中列的类型如何?
答案 0 :(得分:2)
> xy <- data.frame(a = c(0.1, 0.2, 0.3), b = factor(1:3), c = letters[1:3])
>
> xy$a == 0.1
[1] TRUE FALSE FALSE
> xy$a == "0.1"
[1] TRUE FALSE FALSE
> xy$b == "2"
[1] FALSE TRUE FALSE
> xy$b == 2
[1] FALSE TRUE FALSE
> xy$c == "a"
[1] TRUE FALSE FALSE
答案 1 :(得分:1)
一个常见的应用是在给定同一记录中一个或多个其他列变量的值的情况下获取数据框中一个变量的特定值。为此,可以使用“过滤器”命令。它可能看起来很笨重,但它适用于大型数据框。
library(dplyr)
df
rnames col1 col2 col3
1 row1 1 3 a
2 row2 2 6 b
3 row3 3 9 c
4 row4 4 12 d
5 row5 5 15 e
给定 col3 = 'c' 求 col1 的值
a <- filter(df, col3=='c') # can specify multiple known column values
a #produces a data-frame with the record(s)
rnames col1 col2 col3
1 row3 3 9 c # which contains Col1 = 3
class(a)
[1] "data.frame"
但是可以在一行中获取Col1的值
b <- filter(df, col3=='c')$col1
b
[1] 3
class(b)
[1] "numeric"
对于具有多个值的结果
c <- filter(df, col1 > 3)$col3
c[1] "d" "e" # list if > 1 result
class(c)
[1] "character"
答案 2 :(得分:0)
一种有效的方法是在创建数据框时定义其colClasses: 例如:
my_table = read.table("myfile.txt", sep=" ", colClasses = c("character", "character", "numeric"))