Me pasó algo similar cuando intentaba eliminar una carpeta vacía de un servidor remoto. Esto es lo que ls -al
estaba dando como salida:
?????????? ? ? ? ? ? latest
Esta era una carpeta dentro de otra carpeta y quería eliminarla. Probé rmdir
y esto es lo que obtuve:
rm: cannot remove: latest: Invalid argument
Nada parecía funcionar directamente en esa carpeta (no rm -f
, no touch
, nada ). Sin embargo, intenté cambiar el nombre de la carpeta principal y la carpeta latest
volvió a ser normal, que luego pude eliminar usando rm
.
Поскольку я не очень хорошо разбираюсь в R, вместо этого я попробую awk
решение:
$ awk 'NR == 1 { next } { j=0; for (i = 2; i+2 <= NF; i+=3) m[++j] = ($(i+0)+$(i+1)+$(i+2))/3; $0 = $1; for (i=1; i<=j; ++i) $(i+1)=m[i]; print }' file
Ku8QhfS0n_hIOABXuE 4.71674 4.34331
Bx496XsFXiAlj.Eaeo 6.3695 5.88142
W38p0ogk.wIBVRXllY 7.71556 7.64586
QIBkqIS9LR5DfTlTS8 5.69606 5.17742
BZKiEvS0eQ305U0v34 6.17653 5.66787
6TheVd.HiE1UF3lX6g 5.34232 5.23788
Аннотированный awk
скрипт:
# Skip header
NR == 1 { next }
{
j = 0
# Go through the columns from column 2 onwards in groups of thee columns,
# calculating the average of the group and store it in the array m.
for (i = 2; i + 2 <= NF; i += 3)
m[++j] = ($(i+0) + $(i+1) + $(i+2))/3
# Rewrite the current row as the first column only.
$0 = $1
# Add the calculated averages as new columns after column 1.
for (i = 1; i <= j; ++i)
$(i+1) = m[i]
print
}
Код предполагает, что количество столбцов после столбца 1 кратно трем. Если есть один или два завершающих столбца (, как в примере ), эти данные будут удалены.
Я решил это, переместив сначала фрейм данных, потому что мне было проще вычислить средние значения между каждыми тремя строками. Позже я переложил его обратно.
#read in data
df=read.table("DwoC", header=T)
#transpose it
df <- as.data.frame(t(df))
# remove.1,.2,...strings from row names, and save unique row names
rn=unique(gsub("\\..*","",rownames(df)))
n=3
# calculate means between each 3 rows
dd=aggregate(df,list(rep(1:(nrow(df)%/%n+1),each=n,len=nrow(df))),mean)[-1]
# transpose it back
dt <- as.data.frame(t(dd))
# rename columns as the names were lost during transpose step
names(dt)=rn
На основе Вычислить средние значения строки для подмножества столбцов
> df = read.table('file')
>
> data.frame(ID=df[,0], DwoC_2318_mean=rowMeans(df[1:3]), DwoC_3395_mean=rowMeans(df[4:6]))
DwoC_2318_mean DwoC_3395_mean
Ku8QhfS0n_hIOABXuE 4.716736 4.343313
Bx496XsFXiAlj.Eaeo 6.369502 5.881424
W38p0ogk.wIBVRXllY 7.715556 7.645857
QIBkqIS9LR5DfTlTS8 5.696061 5.177421
BZKiEvS0eQ305U0v34 6.176525 5.667866
6TheVd.HiE1UF3lX6g 5.342324 5.237884
>