Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:data.frame中的ne名称因子值_R_Class_Integer_Dataframe_Rename - Fatal编程技术网

R:data.frame中的ne名称因子值

R:data.frame中的ne名称因子值,r,class,integer,dataframe,rename,R,Class,Integer,Dataframe,Rename,已编辑 我有一个data.frame[integer\u disc],它由integer变量(值为1,2,3)组成。数据帧大约有120列和54000行。下面是一张剪短的照片 Col1 Col2 Col3 Col 4 [up to Col 120] 1 2 1 1 3 1 2 1 2 2 2 2 1 3 3 1 (EDIT:在上面的代码片段中,确实有可能某些列只有三个值中的

已编辑

我有一个
data.frame
[integer\u disc],它由
integer
变量(值为1,2,3)组成。数据帧大约有120列和54000行。下面是一张剪短的照片

Col1   Col2   Col3  Col 4 [up to Col 120]
1      2      1     1 
3      1      2     1
2      2      2     2
1      3      3     1
EDIT:在上面的代码片段中,确实有可能某些列只有三个值中的两个。我用
str
EDIT end检查了它)

我想把它们重新命名为“低”、“中”和“高”。可能我以前必须将它们转换为
因子
值?我会通过

integers_factor <- lapply(integer_disc, function(x) as.factor(x))
我还尝试了
cut
功能,但这似乎也不起作用(无论是
integer
还是
factor
值)

integer_disc_labelled <- cut(integers_factor, breaks=c(1,2,3), labels=c("low","medium","high"))

integer\u disc\u标签第一种方式:
使用
ifelse
语句:

df <- read.table(text = "Col1   Col2   Col3  
1      2      1
3      1      2
2      2      2
1      3      3", header = TRUE, stringsAsFactors = FALSE)

df[] <- lapply(df, function(col) ifelse(col == 1, "low", 
                                 ifelse(col == 2, "med", "high")))

> df
  Col1 Col2 Col3
1  low  med  low
2 high  low  med
3  med  med  med
4  low  high high
我根据@agenis和@Roland的有用评论编辑了我的示例-谢谢! 括号的巧妙技巧确保了原始的对象类和结构得以保留——我从哈德利的章节中学到了这一点。

你也可以试试('df'来自@PeterDee的帖子)


df[]另一种相关方法是使用
tidyr
collect
函数将所有变量移动到单个列,然后将因子转换应用到收集的列,然后使用
spread
函数将其扩散回原始列。

只有在每列都有所有级别的因子时,此方法才有效。I如果缺少一个,它将给出一个错误。如果您使用
labels
参数,那么您也应该始终使用
levels
参数。因此,首先将
数据.frame
分隔为两个单独的,只有2个或3个值的值。jap,@PeterDe,您的编辑成功了!谢谢您的帮助!很好,@PeterDee、 我不知道“括号技巧”。它是如何工作的?每个列都有因子的所有级别,还是有些列只能有两个或一个级别?啊,很抱歉再次不精确。我编辑了我的问题,因为有些列只有两个级别似乎很重要。。。
df <- read.table(text = "Col1   Col2   Col3  
1      2      1
3      1      2
2      2      2
1      3      3", header = TRUE, stringsAsFactors = FALSE)

df[] <- lapply(df, function(col) ifelse(col == 1, "low", 
                                 ifelse(col == 2, "med", "high")))

> df
  Col1 Col2 Col3
1  low  med  low
2 high  low  med
3  med  med  med
4  low  high high
df <- read.table(text = "Col1   Col2   Col3  
1      2      1
3      1      2
2      2      2
1      2      3", 
header = TRUE, stringsAsFactors = FALSE)

> df[] <- lapply(df, factor, 
                 levels = c(1, 2, 3), 
                 labels = c("low", "med", "high"))
> df
  Col1 Col2 Col3
1  low  med  low
2 high  low  med
3  med  med  med
4  low  med high

> str(df)
'data.frame':   4 obs. of  3 variables:
 $ Col1: Factor w/ 3 levels "low","med","high": 1 3 2 1
 $ Col2: Factor w/ 3 levels "low","med","high": 2 1 2 2
 $ Col3: Factor w/ 3 levels "low","med","high": 1 2 2 3
df[] <- c('low', 'med', 'high')[as.matrix(df)]
df
#  Col1 Col2 Col3
#1  low  med  low
#2 high  low  med
#3  med  med  med
#4  low high high