Использование базовой функции R aggregate
:
aggregate(value ~ name, dat1, I)
# name value.1 value.2 value.3 value.4
#1 firstName 0.4145 -0.4747 0.0659 -0.5024
#2 secondName -0.8259 0.1669 -0.8962 0.1681
Вы пишете функцию для этого.
num=7
function toBits(num)
-- returns a table of bits, least significant first.
local t={} -- will contain the bits
while num>0 do
rest=math.fmod(num,2)
t[#t+1]=rest
num=(num-rest)/2
end
return t
end
bits=toBits(num)
print(table.concat(bits))
В Lua 5.2 у вас уже есть побитовые функции, которые могут вам помочь ( bit32 )
< hr>Вот наиболее значимая-первая версия с дополнительным отступлением 0 до заданного количества бит:
function toBits(num,bits)
-- returns a table of bits, most significant first.
bits = bits or math.max(1, select(2, math.frexp(num)))
local t = {} -- will contain the bits
for b = bits, 1, -1 do
t[b] = math.fmod(num, 2)
num = math.floor((num - t[b]) / 2)
end
return t
end
Вот функция, вдохновленная принятым ответом с правильным синтаксисом, который возвращает таблицу бит в wriiten справа налево.
num=255
bits=8
function toBits(num, bits)
-- returns a table of bits
local t={} -- will contain the bits
for b=bits,1,-1 do
rest=math.fmod(num,2)
t[b]=rest
num=(num-rest)/2
end
if num==0 then return t else return {'Not enough bits to represent this number'}end
end
bits=toBits(num, bits)
print(table.concat(bits))
>>11111111
function bits(num)
local t={}
while num>0 do
rest=num%2
table.insert(t,1,rest)
num=(num-rest)/2
end return table.concat(t)
end
Поскольку никто не хочет использовать table.insert, пока он полезен здесь
while num>0 do
на for i=math.ceil(select(2,math.frexp(num))),1,-1 do
и t[#t+1]
на t[i]
.
– RPFeltz
23 August 2014 в 13:22
function reverse(t)
local nt = {} -- new table
local size = #t + 1
for k,v in ipairs(t) do
nt[size - k] = v
end
return nt
end
function tobits(num)
local t={}
while num>0 do
rest=num%2
t[#t+1]=rest
num=(num-rest)/2
end
t = reverse(t)
return table.concat(t)
end
print(tobits(7))
# 111
print(tobits(33))
# 100001
print(tobits(20))
# 10100
20
вернет00101
, а не10100
– fl00r 31 January 2012 в 15:56nBits=ceiling(select(2,math.frexp(num)))
и используйте for-loop, начиная с nBits, начиная с 1. – jpjacobs 31 January 2012 в 15:59math.ceil()
, потому что, насколько я могу судить, frexp всегда возвращает целое число для второго значения. Есть ли край, который я пропустил? – Phrogz 26 September 2014 в 04:45