R 用行名称替换数据帧中的值
我有一个如下所示的数据框:R 用行名称替换数据帧中的值,r,dataframe,replace,rows,R,Dataframe,Replace,Rows,我有一个如下所示的数据框: Jill Jimmie Alex Jane Jill 1 0 1 1 Jimmie 0 1 1 0 Alex 0 1 1 0 Jane 1 1 1 0 我想将每个1更改为其对应的行名称,例如: Jill Jimmie Alex Jane Jill Jill
Jill Jimmie Alex Jane
Jill 1 0 1 1
Jimmie 0 1 1 0
Alex 0 1 1 0
Jane 1 1 1 0
我想将每个1更改为其对应的行名称,例如:
Jill Jimmie Alex Jane
Jill Jill 0 Jill Jill
Jimmie 0 Jimmie Jimmie 0
Alex 0 Alex Alex 0
Jane Jane Jane Jane 0
之后,我想从数据帧中删除所有零,并向上移动列中的值
我试过:
# for (i in ibm_data){
# if (ibm_data == 1){
# names <- row.names(i)
# ibm_data[ibm_data == 1] <- names
# }
# else{
# ibm_data[ibm_data == 0] <- "NA"
# }
# }
#for(i在ibm#u数据中){
#如果(ibm_数据==1){
#名称这里有一个选项带有replace/row
df1[] <- replace(row.names(df1)[row(df1)*(NA^!df1)], !df1, 0)
df1
# Jill Jimmie Alex Jane
#Jill Jill 0 Jill Jill
#Jimmie 0 Jimmie Jimmie 0
#Alex 0 Alex Alex 0
#Jane Jane Jane Jane 0
数据
df1虽然我喜欢@akrun的一行,但我想发布一个更详细的答案:
k <- which(df==1, arr.ind=TRUE)
df[k] <- rownames(k)
df
# Jill Jimmie Alex Jane
# Jill Jill 0 Jill Jill
# Jimmie 0 Jimmie Jimmie 0
# Alex 0 Alex Alex 0
# Jane Jane Jane Jane 0
我认为这既可以用1填充单元格值的行名,也可以删除“数据框中的所有零,并将列中的值上移”
这将返回一个命名列表,其中每个列表元素是对应的列,值是列中的值等于1的行名
lapply(dat, function(x) rownames(dat)[x==1])
$Jill
[1] "Jill" "Jane"
$Jimmie
[1] "Jimmie" "Alex" "Jane"
$Alex
[1] "Jill" "Jimmie" "Alex" "Jane"
$Jane
[1] "Jill"
data.frame中单个列中的所有值必须具有相同的类,不能混合使用数字和字符对象。或者在前面的每一列中尝试使用as.character
,并与=“1”进行比较
。我是否在一个for循环中显示这一点,以运行我所有的数据,因为到目前为止我没有得到任何更改?@sgatta你的意思是你想要for
循环解决方案吗?根据我显示的数据,它正在改变它正在工作!这是我这边的一个错误。我将标记你作为我的答案。谢谢!@sgatta尝试使用“数据”在我的帖子和代码中,检查您是否得到了预期的结果。可能是您的数据不是数值
,可能是因子
类?很快,名称会更改,但0仍然存在。如何删除它们并将值上移?
k <- which(df==1, arr.ind=TRUE)
df[k] <- rownames(k)
df
# Jill Jimmie Alex Jane
# Jill Jill 0 Jill Jill
# Jimmie 0 Jimmie Jimmie 0
# Alex 0 Alex Alex 0
# Jane Jane Jane Jane 0
read.table(text='Jill Jimmie Alex Jane
Jill 1 0 1 1
Jimmie 0 1 1 0
Alex 0 1 1 0
Jane 1 1 1 0 ', header = T, quote ='"') -> df
lapply(dat, function(x) rownames(dat)[x==1])
$Jill
[1] "Jill" "Jane"
$Jimmie
[1] "Jimmie" "Alex" "Jane"
$Alex
[1] "Jill" "Jimmie" "Alex" "Jane"
$Jane
[1] "Jill"