Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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 在数据帧中赋值时,因子变为整数_R_Dataframe - Fatal编程技术网

R 在数据帧中赋值时,因子变为整数

R 在数据帧中赋值时,因子变为整数,r,dataframe,R,Dataframe,我有两个数据帧: employee <- c("John Doe","Peter Gynn","Jolie Hope") salary <- c(21000, 23400, 26800) startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14')) data1 <- data.frame(employee, salary, startdate) employee <- c("John Doe", "Rob

我有两个数据帧:

employee <- c("John Doe","Peter Gynn","Jolie Hope")
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
data1 <- data.frame(employee, salary, startdate)

employee <- c("John Doe", "Rob", "Peter Gynn", "Ellen A")
city <- c("city1", "city2", "city3", "city1")
age <- c( 1,3,4,2)
data2 <- data.frame(employee, city, age)
有人能解释一下为什么因子会变成整数,以及为什么下面的方法有效吗

data1[, c("city", "age")] <- data2[1:3, c("city", "age")]

> data1
    employee salary  startdate  city age
1   John Doe  21000 2010-11-01 city1   1
2 Peter Gynn  23400 2008-03-25 city2   3
3 Jolie Hope  26800 2007-03-14 city3   4
data1[,c(“城市”、“年龄”)]data1
员工工资起始日期城市年龄
约翰·多伊21000 2010-11-01城市1 1
2彼得·吉恩23400 2008-03-25城市2 3
3朱莉希望26800 2007-03-14城市3 4

有没有办法避免这种情况?我希望避免使用(绑定函数)。

如果我们需要从“data2”列在“data1”中创建两个变量,我们可以直接创建它,而不是创建新变量作为
NA
,然后用“data2”中相应的列替换这些值。(我没有为行索引指定1:3,因为data1的
nrow
是3)

两个数据集中“城市”的

 class(data1$city)
 #[1] "logical"

  class(data2$city)
 #[1] "factor"
因此,这可能导致将
factor
类强制为
numeric
,因为
factor
的存储模式为
numeric

 mode(data2$city)
 #[1] "numeric"
如果我们想先在“data1”中创建变量,然后替换,一个选项是将变量“city”创建为
因子
,并在
城市
中将级别作为唯一元素

 data1$city <- factor(NA, levels=unique(city))
 data1[, c("city", "age")] <- data2[1:3, c("city", "age")]
 data1$city
 #[1] city1 city2 city3 
 #Levels: city1 city2 city3

data1$city最好使用
character
类而不是
factor
,这可以通过使用
read.table/read.csv
data.frame
调用中的
stringsafactors=FALSE
选项来实现。因子级别存储为整数,因此有可能被强制为integer类。我知道使用字符代替因子可以避免这个问题,但我希望保留原始列类,避免出现上述情况。
data1$city
的类与
data2$city
的类不同,谢谢@akrun的澄清。我首先需要在“data1”中创建新列,因为我不一定用“data2”中的数据填充整个列。因此,“data1$city”可能包含“NA”。第二个解决方案是为data1新列定义类。
 data1$city <- NA
 data1$age <- NA
 class(data1$city)
 #[1] "logical"

  class(data2$city)
 #[1] "factor"
 mode(data2$city)
 #[1] "numeric"
 data1$city <- factor(NA, levels=unique(city))
 data1[, c("city", "age")] <- data2[1:3, c("city", "age")]
 data1$city
 #[1] city1 city2 city3 
 #Levels: city1 city2 city3